[build-system] requires = ["hatchling>=1.25"] build-backend = "hatchling.build" [project] name = "artifactstore" version = "0.1.0" description = "Generic artifact registry and storage gateway" readme = "README.md" requires-python = ">=3.12" license = { file = "LICENSE" } authors = [{ name = "artifact-store contributors" }] keywords = ["artifact", "storage", "registry", "evidence", "retention"] classifiers = [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Software Development :: Libraries", "Topic :: System :: Archiving", ] dependencies = [ "fastapi >= 0.115", "uvicorn[standard] >= 0.30", "sqlalchemy >= 2.0", "asyncpg >= 0.29", "aiosqlite >= 0.20", "alembic >= 1.13", "blake3 >= 0.4", "cbor2 >= 5.6", "jcs >= 0.2", "typer >= 0.12", "structlog >= 24.1", "pydantic >= 2.7", "pydantic-settings >= 2.4", ] [project.optional-dependencies] dev = [ "pytest >= 8.0", "pytest-asyncio >= 0.23", "httpx >= 0.27", "hypothesis >= 6.100", "ruff >= 0.6", "mypy >= 1.10", ] postgres = [ "psycopg[binary] >= 3.2", ] s3 = [ "aioboto3 >= 13.0", ] [project.scripts] artifactstore = "artifactstore.cli:app" [tool.hatch.build.targets.wheel] packages = ["src/artifactstore"] [tool.uv] dev-dependencies = [ "pytest >= 8.0", "pytest-asyncio >= 0.23", "httpx >= 0.27", "hypothesis >= 6.100", "ruff >= 0.6", "mypy >= 1.10", ] [tool.ruff] target-version = "py312" line-length = 100 src = ["src", "tests"] extend-exclude = [".venv", "var", "migrations"] [tool.ruff.lint] select = ["E", "F", "W", "I", "N", "UP", "B", "C4", "RET", "SIM", "RUF"] ignore = [ "B008", # FastAPI dependency injection idiom ] [tool.ruff.lint.per-file-ignores] "tests/**" = ["S101"] "src/artifactstore/cli/__init__.py" = ["UP007"] [tool.ruff.format] quote-style = "double" indent-style = "space" [tool.mypy] python_version = "3.12" strict = true files = ["src", "tests"] mypy_path = "src" explicit_package_bases = true namespace_packages = true [[tool.mypy.overrides]] module = ["jcs"] ignore_missing_imports = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] pythonpath = ["src"] addopts = "-q --strict-markers" markers = [ "integration: marks tests as integration (requires DB / backend)", ]