[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "downpore-infra" version = "0.1.0" description = "Infrastructure execution engine for the downpore distributed download system" readme = "README.md" license = {file = "LICENSE"} requires-python = ">=3.8" authors = [ {name = "Downpore Project"}, ] keywords = ["infrastructure", "ansible", "digitalocean", "vm-management"] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Topic :: System :: Systems Administration", "Topic :: Internet :: WWW/HTTP", ] dependencies = [ "ansible>=6.0.0", "python-digitalocean>=1.17.0", "paramiko>=2.11.0", "pyyaml>=6.0", "jinja2>=3.0.0", ] [project.optional-dependencies] dev = [ "pytest>=7.0.0", "pytest-cov>=4.0.0", "black>=22.0.0", "flake8>=5.0.0", "pyright>=1.1.0", "ansible-lint>=6.0.0", "yamllint>=1.28.0", "pre-commit>=3.0.0", ] [project.urls] Homepage = "https://github.com/downpore/downpore-infra" Repository = "https://github.com/downpore/downpore-infra" Issues = "https://github.com/downpore/downpore-infra/issues" [project.scripts] cleanup-vms = "downpore_infra.scripts.cleanup_vms:main" [tool.hatch.build.targets.wheel] packages = ["src/downpore_infra"] [tool.hatch.metadata] allow-direct-references = true [tool.black] line-length = 88 target-version = ['py38'] [tool.flake8] max-line-length = 88 extend-ignore = ["E203", "W503"] [tool.pyright] pythonVersion = "3.9" typeCheckingMode = "basic" reportMissingImports = "none" reportMissingModuleSource = "none" reportUnusedImport = "error" include = ["src/**/*.py", "tests/**/*.py"] exclude = ["**/build/**", "**/__pycache__/**"] pythonPath = "src" [tool.mypy] python_version = "3.8" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true [tool.pytest.ini_options] testpaths = ["tests"] python_files = ["test_*.py"] python_classes = ["Test*"] python_functions = ["test_*"] markers = [ "slow: marks tests as slow (deselect with '-m \"not slow\"')", "e2e: marks tests as end-to-end (requires real infrastructure)", ] addopts = [ "--cov", "--cov-report=term-missing", "--cov-report=html", "--strict-markers", ] asyncio_default_fixture_loop_scope = "function" [tool.coverage.run] source = ["src/downpore_infra"] disable_warnings = ["couldnt-parse"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "def __repr__", "raise AssertionError", "raise NotImplementedError", ]