[project] name = "python-repositories" version = "2.3.0" description = "Various python repository interfaces exposed as a python package." authors = [ { name = "Brian Bjarke Jensen", email = "schnitzelen@gmail.com" } ] readme = "README.md" requires-python = ">=3.12" license = { text = "MIT" } classifiers = [ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", ] dependencies = [ "python-dotenv>=1.0.0", "python-utils>=0.1.0", "structlog>=25.4.0", ] [project.urls] Repository = "https://gitea.lille-vemmelund.dk/LilleVemmelund/python-repositories" Changelog = "https://gitea.lille-vemmelund.dk/LilleVemmelund/python-repositories/src/branch/main/CHANGELOG.md" Releases = "https://gitea.lille-vemmelund.dk/LilleVemmelund/python-repositories/releases" [project.optional-dependencies] redis = [ "redis>=6.4.0", ] minio = [ "minio>=7.2.16", ] postgres = [ "psycopg[binary]>=3.2.0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.pytest.ini_options] testpaths = ["tests"] addopts = "--import-mode=importlib" markers = [ "integration: tests requiring Docker containers (deselect with '-m \"not integration\"')", "needs_redis: integration test requiring a Redis container", "needs_minio: integration test requiring a MinIO container", "needs_postgres: integration test requiring a Postgres container", ] [tool.coverage.run] source = ["python_repositories"] [tool.coverage.report] fail_under = 100 show_missing = true precision = 2 [tool.uv.sources] python-utils = { index = "gitea" } [[tool.uv.index]] name = "threadripper-proxpi-cache" url = "https://proxpi.lille-vemmelund.dk/index/" default = true [[tool.uv.index]] name = "gitea" url = "https://gitea.lille-vemmelund.dk/api/packages/brian/pypi/simple/" explicit = true [tool.ruff] line-length = 88 target-version = "py312" [tool.ruff.lint] extend-select = ["I"] [tool.ruff.lint.isort] known-first-party = ["python_repositories", "tests"] combine-as-imports = true force-sort-within-sections = true [tool.mypy] python_version = "3.12" warn_return_any = true # nudge to use stricter types warn_unused_configs = true # nudge to remove unused configs disallow_untyped_defs = true # disallow untyped function definitions disallow_incomplete_defs = true # ensure all parts of a function has type annotation check_untyped_defs = true # dont skip untyped functions disallow_untyped_decorators = false # allow untyped decorators to keep code more readable no_implicit_optional = true # disallow implicit optional types leading to None-mess warn_redundant_casts = true # nudge to use explicit type casts warn_unused_ignores = true # nudge to remove unused ignores warn_no_return = true # catch missing return statements warn_unreachable = true # catch unreachable code show_error_codes = true # show error codes in output explicit_package_bases = true # reduce risk of import confusion namespace_packages = true # enable namespace packages [[tool.mypy.overrides]] module = "testcontainers.*" ignore_missing_imports = true [[tool.mypy.overrides]] module = "minio.*" ignore_missing_imports = true [dependency-groups] dev = [ "mypy>=2.1.0", "pre-commit>=4.6.0", "pytest>=8.4.1", "pytest-cov>=7.0.0", "pyupgrade>=3.21.2", "ruff>=0.15.20", "safety>=3.6.0", "testcontainers>=4.13.0", ]