# Core engine. The streaming fallback parser uses only stdlib; python-calamine is the fast
# (Rust) default parser — set AR_USE_CALAMINE=0 to force the low-memory streaming reader.
openpyxl==3.1.5
python-calamine>=0.3.0

# API layer
fastapi==0.115.6
# Pinned deliberately: fastapi 0.115.6 requires starlette <0.42, and Starlette 1.x dropped the
# `on_startup` argument from Router.__init__. An unpinned upgrade to 1.3.1 broke every route
# module at import time with "Router.__init__() got an unexpected keyword argument 'on_startup'".
starlette==0.41.3
uvicorn[standard]==0.34.0
python-multipart==0.0.20
pydantic==2.10.4
SQLAlchemy==2.0.36
PyMySQL==1.1.1
cryptography>=42.0.0
python-dotenv==1.0.1
# CA bundle for the FX-rate fetch — the Windows OS cert store is unreliable on some machines
certifi>=2024.2.2

# Data helpers (optional / analysis)
pandas>=2.2

# Testing
pytest==8.3.4
