# Hosted mode only. serve.py and run_report.py need nothing but openpyxl.

# --- web ---
fastapi>=0.115,<1.0
uvicorn[standard]>=0.34,<1.0
python-multipart>=0.0.20      # Starlette needs it to parse multipart uploads

# --- data ---
sqlalchemy>=2.0.36,<3.0
pymysql>=1.1.1                # pure-python driver, so the image needs no compiler
cryptography>=43.0            # PyMySQL needs it for caching_sha2_password (RDS MySQL 8 default)

# --- config / validation ---
pydantic>=2.9,<3
pydantic-settings>=2.6,<3     # pulls in python-dotenv
email-validator>=2.2          # required by pydantic EmailStr

# --- auth ---
argon2-cffi>=23.1             # not passlib: its last release is 2020 and it breaks on bcrypt>=4.1

# --- outbound ---
httpx>=0.27                   # multipart POST to EMAIL_ENDPOINT

# --- analysis ---
openpyxl>=3.1.5
