From e11ff168c2c48636bebae7ce931d613a01130cb5 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 5 Oct 2026 18:09:44 +0300 Subject: [PATCH 1/2] fix: pass an optional request provider to choose_sa_engine for modern-di 4.0 --- app/ioc.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/ioc.py b/app/ioc.py index 6190593..efc5ab4 100644 --- a/app/ioc.py +++ b/app/ioc.py @@ -1,3 +1,4 @@ +import fastapi from modern_di import Group, Scope, providers from app.repositories import CardsRepository, DecksRepository @@ -22,10 +23,23 @@ class Dependencies(Group): cache=providers.CacheSettings(finalizer=close_sa_engine), bound_type=None, ) + try: + optional_request = providers.ContextProvider( + fastapi.Request, + scope=Scope.REQUEST, + bound_type=None, + **{"default": None}, # noqa: PIE804 + ) + except TypeError: # pragma: no cover # modern-di 3.x has no default= and passes None to nullable params + optional_request = providers.ContextProvider(fastapi.Request, scope=Scope.REQUEST, bound_type=None) dynamic_engine = providers.Factory( scope=Scope.REQUEST, creator=choose_sa_engine, - kwargs={"primary_engine": database_engine, "replica_engine": database_replica_engine}, + kwargs={ + "primary_engine": database_engine, + "replica_engine": database_replica_engine, + "request": optional_request, + }, ) session = providers.Factory( scope=Scope.REQUEST, From abf41c14cb497a4297603761df7f1ad0a491be01 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 5 Oct 2026 18:38:46 +0300 Subject: [PATCH 2/2] refactor: drop the modern-di 3.x fallback for the optional request provider --- app/ioc.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/ioc.py b/app/ioc.py index efc5ab4..f5326d4 100644 --- a/app/ioc.py +++ b/app/ioc.py @@ -23,15 +23,7 @@ class Dependencies(Group): cache=providers.CacheSettings(finalizer=close_sa_engine), bound_type=None, ) - try: - optional_request = providers.ContextProvider( - fastapi.Request, - scope=Scope.REQUEST, - bound_type=None, - **{"default": None}, # noqa: PIE804 - ) - except TypeError: # pragma: no cover # modern-di 3.x has no default= and passes None to nullable params - optional_request = providers.ContextProvider(fastapi.Request, scope=Scope.REQUEST, bound_type=None) + optional_request = providers.ContextProvider(fastapi.Request, scope=Scope.REQUEST, bound_type=None, default=None) dynamic_engine = providers.Factory( scope=Scope.REQUEST, creator=choose_sa_engine,