thermograph/backend/requirements.txt
Emi Griffith 30b0c70bbb
All checks were successful
secrets-guard / encrypted (pull_request) Successful in 6s
PR build (required check) / changes (pull_request) Successful in 8s
shell-lint / shellcheck (pull_request) Successful in 9s
PR build (required check) / validate-observability (pull_request) Has been skipped
PR build (required check) / build-frontend (pull_request) Successful in 1m9s
PR build (required check) / build-backend (pull_request) Successful in 1m44s
PR build (required check) / gate (pull_request) Successful in 2s
Reconcile: merge main (shellcheck guard, Go daemon) into dev
main took two direct PRs (#19 shell-lint, #21 the thermograph-daemon Go
service) while dev accumulated the ERA5 lake stack; both sides added compose/
stack services and touched the same seams. Resolutions keep both worlds:

- compose + Swarm stack: lake AND daemon are sibling services; backend env
  carries THERMOGRAPH_LAKE_URL and THERMOGRAPH_INTERNAL_TOKEN.
- deploy.sh: backend deploys roll (backend lake daemon); all adds frontend.
- requirements.txt: websockets/apscheduler stay removed (moved to the Go
  daemon), duckdb stays (the lake role's engine).

Merged tree: backend suite green, both compose configs validate.
2026-07-23 17:06:52 -07:00

29 lines
1.4 KiB
Text

fastapi==0.115.6
uvicorn[standard]==0.34.0
httpx==0.28.1
polars==1.42.1
numpy==2.2.1
# Accounts + notification subscriptions (see accounts/db.py, users.py, notify.py).
# Postgres in prod/containers: asyncpg (async web/store) + psycopg (sync notifier);
# aiosqlite is kept for the SQLite fallback the test suite runs on. alembic manages
# the accounts schema. The `pool` extra pulls in psycopg_pool, used by
# data/climate_store.py + data/store.py to bound the raw connections those modules
# open on Postgres (see their module docstrings) instead of one-per-thread forever.
fastapi-users[sqlalchemy]==15.0.5
aiosqlite==0.22.1
asyncpg==0.30.0
psycopg[binary,pool]==3.2.3
alembic==1.14.0
# Web Push (VAPID) delivery of notifications (see notifications/push.py). Pulls in
# py-vapid, cryptography, and http-ece.
pywebpush==2.0.0
# Ed25519 verification of Discord interaction webhooks (see notifications/discord_interactions.py).
PyNaCl==1.5.0
# The Discord gateway bot and the recurring worker jobs moved to the
# thermograph-daemon Go binary (backend/daemon/), which calls back over
# api/internal_routes.py — so the direct `websockets` pin (only discord_bot.py
# imported it; uvicorn[standard] still pulls it transitively for its own ws
# protocol support) and `apscheduler` are gone from this list.
# The lake role's SQL engine (lake_app.py /query): embedded, parallel
# partition-pruned scans over the ERA5 hive table. Only lake_app imports it.
duckdb==1.4.2