From 1a2179b221146391bdb8f03bd7b6b52de63d1976 Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 5 Oct 2026 18:11:20 +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..b037b7d 100644 --- a/app/ioc.py +++ b/app/ioc.py @@ -1,3 +1,4 @@ +import litestar 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( + litestar.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(litestar.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 c899dbf31ed09ad67c3220cab14699c6d59a573a Mon Sep 17 00:00:00 2001 From: Artur Shiriev Date: Mon, 5 Oct 2026 18:38:48 +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 b037b7d..fb4811f 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( - litestar.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(litestar.Request, scope=Scope.REQUEST, bound_type=None) + optional_request = providers.ContextProvider(litestar.Request, scope=Scope.REQUEST, bound_type=None, default=None) dynamic_engine = providers.Factory( scope=Scope.REQUEST, creator=choose_sa_engine,