From 500438636a945d1474c53a9ccfa1c20cfc7bcc58 Mon Sep 17 00:00:00 2001 From: June Date: Wed, 5 Jun 2024 15:24:47 +0200 Subject: [PATCH] Create a skeleton python project and modify it to fit this project Create a skeleton python project using "hatch new -i --cli infra-rebuild" with Hatch version 1.7.0 and modify it to fit this project. This is the first step of porting infra-rebuild to Python. Also provide a first .gitignore ignoring relevant build directories. --- .gitignore | 3 + pyproject.toml | 162 ++++++++++++++++++++++++++++++ src/infra_rebuild/__about__.py | 1 + src/infra_rebuild/__init__.py | 0 src/infra_rebuild/__main__.py | 6 ++ src/infra_rebuild/cli/__init__.py | 9 ++ tests/__init__.py | 0 7 files changed, 181 insertions(+) create mode 100644 .gitignore create mode 100644 pyproject.toml create mode 100644 src/infra_rebuild/__about__.py create mode 100644 src/infra_rebuild/__init__.py create mode 100644 src/infra_rebuild/__main__.py create mode 100644 src/infra_rebuild/cli/__init__.py create mode 100644 tests/__init__.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb10265 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +__pycache__ +/dist/ +/.coverage* diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..3b741e4 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,162 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "infra-rebuild" +dynamic = ["version"] +description = "A simple NixOS deployment tool using nixos-rebuild internally, but trying to make infrastructure deployment more convenient." +readme = "README.md" +requires-python = ">=3.7" +keywords = ["nix", "NixOS"] +authors = [ + { name = "June", email = "june@jsts.xyz" }, +] +classifiers = [ + "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", + "Development Status :: 4 - Beta", + "Programming Language :: Python", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", +] +dependencies = [ + "click", +] + +[project.urls] +Documentation = "https://git.hamburg.ccc.de/CCCHH/infra-rebuild#readme" +Issues = "https://git.hamburg.ccc.de/CCCHH/infra-rebuild/issues" +Source = "https://git.hamburg.ccc.de/CCCHH/infra-rebuild" + +[project.scripts] +infra-rebuild = "infra_rebuild.cli:infra_rebuild" + +[tool.hatch.version] +path = "src/infra_rebuild/__about__.py" + +[tool.hatch.envs.default] +dependencies = [ + "coverage[toml]>=6.5", + "pytest", +] +[tool.hatch.envs.default.scripts] +test = "pytest {args:tests}" +test-cov = "coverage run -m pytest {args:tests}" +cov-report = [ + "- coverage combine", + "coverage report", +] +cov = [ + "test-cov", + "cov-report", +] + +[[tool.hatch.envs.all.matrix]] +python = ["3.7", "3.8", "3.9", "3.10", "3.11"] + +[tool.hatch.envs.lint] +detached = true +dependencies = [ + "black>=23.1.0", + "mypy>=1.0.0", + "ruff>=0.0.243", +] +[tool.hatch.envs.lint.scripts] +typing = "mypy --install-types --non-interactive {args:src/infra_rebuild tests}" +style = [ + "ruff {args:.}", + "black --check --diff {args:.}", +] +fmt = [ + "black {args:.}", + "ruff --fix {args:.}", + "style", +] +all = [ + "style", + "typing", +] + +[tool.black] +target-version = ["py37"] +line-length = 120 +skip-string-normalization = true + +[tool.ruff] +target-version = "py37" +line-length = 120 +select = [ + "A", + "ARG", + "B", + "C", + "DTZ", + "E", + "EM", + "F", + "FBT", + "I", + "ICN", + "ISC", + "N", + "PLC", + "PLE", + "PLR", + "PLW", + "Q", + "RUF", + "S", + "T", + "TID", + "UP", + "W", + "YTT", +] +ignore = [ + # Allow non-abstract empty methods in abstract base classes + "B027", + # Allow boolean positional values in function calls, like `dict.get(... True)` + "FBT003", + # Ignore checks for possible passwords + "S105", "S106", "S107", + # Ignore complexity + "C901", "PLR0911", "PLR0912", "PLR0913", "PLR0915", +] +unfixable = [ + # Don't touch unused imports + "F401", +] + +[tool.ruff.isort] +known-first-party = ["infra_rebuild"] + +[tool.ruff.flake8-tidy-imports] +ban-relative-imports = "all" + +[tool.ruff.per-file-ignores] +# Tests can use magic values, assertions, and relative imports +"tests/**/*" = ["PLR2004", "S101", "TID252"] + +[tool.coverage.run] +source_pkgs = ["infra_rebuild", "tests"] +branch = true +parallel = true +omit = [ + "src/infra_rebuild/__about__.py", +] + +[tool.coverage.paths] +infra_rebuild = ["src/infra_rebuild", "*/infra-rebuild/src/infra_rebuild"] +tests = ["tests", "*/infra-rebuild/tests"] + +[tool.coverage.report] +exclude_lines = [ + "no cov", + "if __name__ == .__main__.:", + "if TYPE_CHECKING:", +] diff --git a/src/infra_rebuild/__about__.py b/src/infra_rebuild/__about__.py new file mode 100644 index 0000000..f102a9c --- /dev/null +++ b/src/infra_rebuild/__about__.py @@ -0,0 +1 @@ +__version__ = "0.0.1" diff --git a/src/infra_rebuild/__init__.py b/src/infra_rebuild/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/infra_rebuild/__main__.py b/src/infra_rebuild/__main__.py new file mode 100644 index 0000000..37c16c5 --- /dev/null +++ b/src/infra_rebuild/__main__.py @@ -0,0 +1,6 @@ +import sys + +if __name__ == "__main__": + from infra_rebuild.cli import infra_rebuild + + sys.exit(infra_rebuild()) diff --git a/src/infra_rebuild/cli/__init__.py b/src/infra_rebuild/cli/__init__.py new file mode 100644 index 0000000..2e350b2 --- /dev/null +++ b/src/infra_rebuild/cli/__init__.py @@ -0,0 +1,9 @@ +import click + +from infra_rebuild.__about__ import __version__ + + +@click.group(context_settings={"help_option_names": ["-h", "--help"]}, invoke_without_command=True) +@click.version_option(version=__version__, prog_name="infra-rebuild") +def infra_rebuild(): + click.echo("Hello world!") diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29