Port of modern-python/fastapi-sqlalchemy-template#30 (implemented in modern-python/fastapi-sqlalchemy-template#71) so the two templates stay in step.
Behaviour
- New
DB_REPLICA_DSN setting, empty by default. Empty means no replica engine and no change in behaviour.
- When set,
GET/HEAD requests use the replica engine; every other method, and any resolution without a request, uses the primary.
Shape
app/resources/db.py: create_sa_engine(url), create_primary_sa_engine, create_replica_sa_engine (returns None when unset), close_sa_engine tolerating None, choose_sa_engine(primary_engine, replica_engine, request: litestar.Request | None = None).
app/ioc.py: database_engine, database_replica_engine (both bound_type=None), request-scoped dynamic_engine; session wired to dynamic_engine via explicit kwargs.
tests/conftest.py overrides dynamic_engine with the rolled-back connection.
app/resources/*.py exempt from ruff TC rules, since modern-di evaluates creator annotations at runtime.
- Tests for method routing, no-request and no-replica fallbacks, and building the replica engine from the DSN.
AGENTS.md updated.
Port of modern-python/fastapi-sqlalchemy-template#30 (implemented in modern-python/fastapi-sqlalchemy-template#71) so the two templates stay in step.
Behaviour
DB_REPLICA_DSNsetting, empty by default. Empty means no replica engine and no change in behaviour.GET/HEADrequests use the replica engine; every other method, and any resolution without a request, uses the primary.Shape
app/resources/db.py:create_sa_engine(url),create_primary_sa_engine,create_replica_sa_engine(returnsNonewhen unset),close_sa_enginetoleratingNone,choose_sa_engine(primary_engine, replica_engine, request: litestar.Request | None = None).app/ioc.py:database_engine,database_replica_engine(bothbound_type=None), request-scopeddynamic_engine;sessionwired todynamic_enginevia explicit kwargs.tests/conftest.pyoverridesdynamic_enginewith the rolled-back connection.app/resources/*.pyexempt from ruffTCrules, since modern-di evaluates creator annotations at runtime.AGENTS.mdupdated.