fastapi[standard]==0.115.5
uvicorn[standard]==0.32.1
httpx==0.28.1
python-multipart==0.0.31
sqlalchemy[asyncio]==2.0.36
asyncpg==0.30.0
psycopg2-binary==2.9.10
alembic==1.14.0
pgvector==0.3.6
redis[hiredis]==5.2.1
celery[redis]==5.4.0
celery-redbeat==2.2.0
pydantic==2.10.3
pydantic-settings==2.6.1
pydantic[email]==2.10.3
python-jose[cryptography]==3.4.0
passlib[bcrypt]==1.7.4
# bcrypt is used DIRECTLY by app/core/security.py (not via passlib's broken
# backend probe - see the comment there). Any modern 4.x/5.x release works
# because we truncate to 72 bytes ourselves before hashing.
bcrypt>=4.0.1
pyotp==2.9.0
cryptography==43.0.3
qrcode[pil]==8.0
slowapi==0.1.9
limits==3.13.0
minio==7.2.11
boto3==1.35.76
fastapi-mail==1.4.1
jinja2==3.1.6
python-dateutil==2.9.0.post0
pytz==2024.2
arrow==1.3.0
numpy==2.1.3
pandas==2.2.3
reportlab==4.2.5
openpyxl==3.1.5
python-docx==1.1.2
weasyprint==63.1
structlog==24.4.0
sentry-sdk[fastapi]==2.19.0
prometheus-fastapi-instrumentator==7.0.0
aiofiles==24.1.0
anyio==4.7.0
phonenumbers==8.13.50
python-stdnum==1.20
pywebpush>=2.0.0
anthropic>=0.28.0

# ASGI->WSGI bridge: lets Phusion Passenger (cPanel "Setup Python App")
# serve this ASGI app with no mod_proxy and no background port. The app has no
# WebSocket routes, so the WSGI bridge carries 100% of functionality.
a2wsgi==1.10.10
