[project] name = "photoanalyzer" version = "0.1.0" requires-python = ">=3.12" dependencies = [ "fastapi>=0.115", "uvicorn>=0.30", "sqlalchemy>=2.0", "alembic>=1.13", "pydantic>=2.7", # Imaging is runtime, not test-only: thumbnails decode through Pillow, and the # perceptual hash is a DCT over the decoded pixels (services/hashing.py). "pillow>=10", "numpy>=1.26", "scipy>=1.11", ] [project.optional-dependencies] # The cloud vision provider. Optional because the analysis stage is the only thing # that needs it, and a local review-only install should not pull an API client. vision = ["openai>=1.30"] test = [ "pytest>=8", "httpx>=0.27", "playwright>=1.40", "pytest-playwright>=0.4", # The composition and the workflows are configuration, and the tests that hold # them to their promises read them (US08-03, US08-04). "pyyaml>=6", ] [build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [tool.setuptools] # The importable application. ``migrations`` and ``work_item`` live beside it but # are not part of the package; without this, an editable install cannot guess. packages = ["photo_pipeline"] # Browser end-to-end tests also require: python -m playwright install chromium [tool.ruff] line-length = 100 # The frozen CLI archive is evidence, not code under maintenance (US07-01). extend-exclude = ["legacy_cli_archive"] [tool.pytest.ini_options] testpaths = ["tests"] markers = [ "phase_b: Phase B end-to-end acceptance (US02-07) — API, worker-recovery, and browser journeys", "phase_c: Phase C end-to-end acceptance (US03-05) — album proposal API and browser journeys", "phase_d: Phase D end-to-end acceptance (US04-06) — guarded rename API, fault, and browser journeys", "phase_e: Phase E end-to-end acceptance (US05-06) — upload preflight, uploader, and browser journeys", "phase_f: Phase F end-to-end acceptance (US06-06) — archive destination, transfer, and restore journeys", "container: builds and runs the container image and its composition (US08-02, US08-03) — needs a Docker daemon, the compose plugin, and the network", ]