Skip to main content

Project configuration as code

Project description

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))

    GitIgnore(
      ignore=[
        "*.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.

Project details


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.6.0.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

synth_a_py-1.6.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: synth-a-py-1.6.0.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.8.8 Linux/5.4.0-1040-azure

File hashes

Hashes for synth-a-py-1.6.0.tar.gz
Algorithm Hash digest
SHA256 ae51de6aca2f00a6d6746b6087229482aaff18c2d82b01b7844e627b63a5e927
MD5 3b0ce32e19a2bf9615cecbfa6788e057
BLAKE2b-256 94e62954510bd371c868f59998bdd4eaffbd80d2457a9b343453d38e15af4ad9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: synth_a_py-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.8.8 Linux/5.4.0-1040-azure

File hashes

Hashes for synth_a_py-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e5db826a9af372e8fd2aa6bfde19567bbc5f8e28cea28437bc12780aff116f8
MD5 b52c4d30c95d9f7c0027036c6c2a9b57
BLAKE2b-256 b4a85a45469fd8d256014f82aa79e7afb4d53ef2d642154d7b9e80e5f8c19054

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page