Skip to main content

synth-a-py

Build

Project configuration as code

Goals

  • Use synth-a-py to manage project configs
    • Add support for:
      • LICENSE
      • TOML (for pyproject.toml)
      • YAML (for GitHub Actions config)
        • GitHub Action workflow?
      • INI (for flake8/mypy config)
      • Makefile
      • .gitignore
    • Add ./synth.py
  • Templates:
    • Poetry
    • setup.py
    • Pipenv
  • In-repo examples:
    • Minimal
    • Monorepo

Example usage

#!/usr/bin/env python
from textwrap import dedent

from synth_a_py import Dir, License, Project, SimpleFile, TomlFile, YamlFile

authors = ["Joseph Egan"]

project_name = "sample-project"
project_description = "A sample project generated using synth-a-py"
project_version = "0.1.0"

project_import = project_name.lower().replace("-", "_")

spec = Project()
with spec:

    TomlFile(
        "pyproject.toml",
        {
            "build-system": {
                "requires": ["poetry>=0.12"],
                "build-backend": "poetry.masonry.api",
            },
            "tool": {
                "poetry": {
                    "name": project_name,
                    "version": project_version,
                    "description": project_description,
                    "authors": authors,
                    "license": "MIT",
                    "dependencies": {
                        "python": "^3.6",
                    },
                    "dev-dependencies": {
                        "pytest": "^6",
                        "pyprojroot": "^0.2.0",
                        "synth-a-py": "../synth-a-py",
                    },
                },
            },
        },
    )

    License.MIT("2020", ", ".join(authors))

    SimpleFile(
        ".gitignore",
        dedent(
            """\
            *.egg
            *.egg-info/
            *.pyc
            .cache/
            .idea/
            .mypy_cache/
            .venv/
            dist/
            """
        ),
    )

    SimpleFile(
        "Makefile",
        dedent(
            """\
            .PHONEY: test
            test:
            \tpoetry install
            \tpoetry run pytest

            .PHONEY: synth
            synth:
            \tpoetry run ./synth.py
            """
        ),
    )

    with Dir(project_import):
        SimpleFile(
            "__init__.py",
            dedent(
                f"""\
                __version__ = "{project_version}"
                """
            ),
        )

    with Dir("tests"):
        SimpleFile(
            "test_version.py",
            dedent(
                f"""\
                import toml
                from pyprojroot import here

                from {project_import} import __version__


                def test_version() -> None:
                    pyproject = toml.load(here("pyproject.toml"))
                    pyproject_version = pyproject["tool"]["poetry"]["version"]

                    assert __version__ == pyproject_version
                """
            ),
        )

    with Dir(".github"):
        with Dir("workflows"):
            YamlFile(
                "ci.yml",
                {
                    "name": "ci",
                    "on": {
                        "pull_request": {
                            "branches": ["main"],
                        },
                        "push": {"branches": ["main"]},
                    },
                    "jobs": {
                        "test": {
                            "runs-on": "ubuntu-latest",
                            "steps": [
                                {
                                    "name": "checkout",
                                    "uses": "actions/checkout@v2",
                                },
                                {
                                    "name": "setup Python",
                                    "uses": "actions/setup-python@v2",
                                    "with": {
                                        "python-version": "3.9",
                                    },
                                },
                                {
                                    "name": "test",
                                    "run": dedent(
                                        """\
                                        pip install poetry
                                        make test
                                        """
                                    ),
                                },
                            ],
                        },
                    },
                },
            )

spec.synth()

Updating project config

To do this make edits to the .projenrc.js file in the root of the project and run npx projen to update existing or generate new config. Please also use npx prettier --trailing-comma all --write .projenrc.js to format this file.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

synth-a-py-1.5.0.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

synth_a_py-1.5.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

Details for the file synth-a-py-1.5.0.tar.gz.

File metadata

  • Download URL: synth-a-py-1.5.0.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.4.0-1031-azure

File hashes

Hashes for synth-a-py-1.5.0.tar.gz
Algorithm Hash digest
SHA256 46192f60063d58d76d42c192e081bbd9a0b3dd4db441d4b47060fac30d101a12
MD5 8351e3a39c00d2a82241e41ae467b5fe
BLAKE2b-256 cba1cac6e850f7fc79562ad8bd559840fcb7f2cb3775483b3edd81890a60f0ff

See more details on using hashes here.

File details

Details for the file synth_a_py-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: synth_a_py-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 11.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.4.0-1031-azure

File hashes

Hashes for synth_a_py-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dcc5fa5b7e8eb41f3aa7bbaab35d20755ba9f633189a92f4229a1320309b2cc9
MD5 78ee3b4fe9575a3f0aeeb99d7ad47102
BLAKE2b-256 9082493ba5a1f4c43ba9e2e60e3d58f702c001893b5ba283c3966c7ecc56b292

See more details on using hashes here.

Release history Release notifications | RSS feed

1.6.0

2 files

This release

1.5.0 This release

2 files

1.4.0

2 files

1.3.1

2 files

1.3.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page