pyproject.toml (150 lines of code) (raw):
[project]
name = "tooling-trusted-release"
version = "0.0.1"
description = "Apache Trusted Release Platform"
authors = [
{ name = "ASF Tooling", email = "dev@tooling.apache.org" }
]
license = "Apache-2.0"
readme = "README.md"
requires-python = "~=3.13"
# https://bugs.launchpad.net/dkimpy/+bug/2024461
dependencies = [
"aiofiles>=24.1.0,<25.0.0",
"aiohttp>=3.11.14",
"aioshutil (>=1.5,<2.0)",
"aiosmtplib (>=4.0.0,<5.0.0)",
"aiosqlite>=0.21.0,<0.22.0",
"aiozipstream (>=0.4,<0.5)",
"alembic~=1.14",
"asfquart @ git+https://github.com/apache/infrastructure-asfquart.git@main",
"asyncssh>=2.20.0,<3.0.0",
"blockbuster>=1.5.23,<2.0.0",
"cryptography~=44.0",
"dkimpy @ git+https://github.com/sbp/dkimpy.git@main",
"dnspython>=2.7.0,<3.0.0",
"dunamai>=1.23.0",
"email-validator~=2.2.0",
"greenlet>=3.1.1,<4.0.0",
"httpx~=0.27",
"hypercorn~=0.17",
"python-decouple~=3.8",
"python-gnupg~=0.5",
"quart-schema[pydantic]~=0.21",
"quart-wtforms~=1.0.3",
"rich~=14.0.0",
"sqlmodel~=0.0.24",
]
[dependency-groups]
dev = [
"decouple-types>=1.0",
"djlint>=1.36.4",
"mypy>=1.15.0",
"pre-commit>=2.20.0",
"pyright>=1.1.393",
"ruff>=0.9.4",
"types-aiofiles>=24.1.0.20241221,<25.0.0.0",
]
test = [
"netifaces>=0.11.0",
"playwright>=1.51.0",
"pytest-asyncio>=0.24",
"pytest>=8.0",
]
# Other configuration
# Poetry specific config
[tool.poetry]
package-mode = false
[tool.poetry.group.test.dependencies]
netifaces = "^0.11.0"
playwright = "^1.51.0"
pytest = ">=8.0"
pytest-asyncio = ">=0.24"
[tool.poetry.group.dev.dependencies]
decouple-types = ">=1.0"
djlint = "^1.36.4"
mypy = "^1.15.0"
pre-commit = ">=2.20.0"
pyright = ">=1.1.393"
ruff = ">=0.9.4"
types-aiofiles = ">=24.1.0.20241221,<25.0.0.0"
# Additional tools
[tool.pyright]
include = ["atr", "playwright"]
exclude = [
"**/node_modules",
"**/__pycache__",
".venv*",
"tests",
"atr/util.py"
]
ignore = []
defineConstant = { DEBUG = true }
stubPath = "typestubs"
reportMissingImports = "error"
reportMissingTypeStubs = false
pythonVersion = "3.13"
executionEnvironments = [
{ root = ".", pythonVersion = "3.13" }
]
[tool.ruff]
line-length = 120
[tool.ruff.lint]
ignore = []
select = [
"I", # isort
"E",
"W",
"F",
"N", # pep8-naming
"RUF", # ruff-checks
"C90",
"TID", # flake8-tidy-imports
"TC", # flake8-type-checking
"UP" # pyupgrade
]
[tool.ruff.lint.per-file-ignores]
"atr/analysis.py" = ["RUF001"]
"atr/apache.py" = ["N815", "TC003"]
"atr/db/__init__.py" = ["C901"]
"atr/routes/modules.py" = ["F401"]
"migrations/env.py" = ["E402"]
"scripts/release_path_parse.py" = ["C901", "RUF001"]
[tool.mypy]
python_version = "3.13"
exclude = ["tests"]
mypy_path = "typestubs"
check_untyped_defs = false
disallow_incomplete_defs = true
disallow_untyped_decorators = true
disallow_untyped_defs = true
ignore_missing_imports = true
no_implicit_optional = true
strict_optional = true
warn_redundant_casts = true
warn_return_any = true
# warn_unreachable = true
warn_unused_ignores = true
[[tool.mypy.overrides]]
module = "asfquart.*"
ignore_errors = true
[[tool.mypy.overrides]]
module = "tests.*"
ignore_errors = true
[tool.djlint]
profile = "jinja"
extension = "html"
indent = 2
blank_line_after_tag = "load,extends,include,html"
close_void_tags = true
format_css = true
format_js = true
max_line_length = 120
use_gitignore = true
preserve_blank_lines = true
ignore = "H006,H031"
include = "atr/templates"
[tool.pytest.ini_options]
minversion = "8.0"
testpaths = ["tests"]
asyncio_mode = "auto"