[project] name = "booth" version = "0.6.0" description = "The Booth — a dead-simple standing web server that scans a data dir of drop-folders and renders each as an ephemeral media 'booth' (image/webm/audio auto-gallery, or a folder's own index.html verbatim). Also accepts browser/curl uploads for pickup under a human-readable id. 24h TTL, then the folder is wiped. Fleet tool for CC sessions to surface A/B and smoke results to the operator." requires-python = ">=3.11" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.34", "jinja2>=3.1", "python-multipart>=0.0.9", "markdown>=3.5", ] [project.optional-dependencies] test = [ "pytest>=8.0", "httpx>=0.27", # fastapi TestClient # U3's embed seam moves placement into the browser, where no string # assertion can see it. Browsers are NOT downloaded per project: they live # box-wide in /opt/ms-playwright with PLAYWRIGHT_BROWSERS_PATH wired # globally. THE UPPER BOUND IS THE POINT -- each playwright release pins a # Chromium revision, and one that wants a revision the shared store does # not have dies with an opaque "Executable doesn't exist" rather than a # missing-dependency error. 1.60-1.62 map to chromium 1223/1228/1234, all # present. Raise the bound only after the store has the newer revision. "playwright>=1.60,<1.63", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["booth"] [tool.pytest.ini_options] testpaths = ["tests"]