Add no-op session cache when session cache is disabled
Use NoOpSessionCache in backend/app/main.py and dynamically switch cache implementation in backend/app/dependencies.py so disabled cache mode remains safe while get_session_cache always returns a valid object.
This commit is contained in:
@@ -26,7 +26,7 @@ from app.repositories.protocols import SessionRepository
|
||||
from app.services.protocols import AuthService, JailService
|
||||
from app.utils.constants import SESSION_COOKIE_NAME
|
||||
from app.utils.runtime_state import RuntimeState
|
||||
from app.utils.session_cache import SessionCache
|
||||
from app.utils.session_cache import InMemorySessionCache, NoOpSessionCache, SessionCache
|
||||
|
||||
log: structlog.stdlib.BoundLogger = structlog.get_logger()
|
||||
|
||||
@@ -79,6 +79,17 @@ def _session_cache_enabled(settings: Settings) -> bool:
|
||||
|
||||
def _build_app_context(request: Request) -> ApplicationContext:
|
||||
state = cast("AppState", request.app.state)
|
||||
session_cache = getattr(state, "session_cache", None)
|
||||
if session_cache is None:
|
||||
session_cache = NoOpSessionCache()
|
||||
state.session_cache = session_cache
|
||||
elif _session_cache_enabled(state.settings) and isinstance(session_cache, NoOpSessionCache):
|
||||
session_cache = InMemorySessionCache()
|
||||
state.session_cache = session_cache
|
||||
elif not _session_cache_enabled(state.settings) and not isinstance(session_cache, NoOpSessionCache):
|
||||
session_cache = NoOpSessionCache()
|
||||
state.session_cache = session_cache
|
||||
|
||||
return ApplicationContext(
|
||||
settings=state.settings,
|
||||
http_session=getattr(state, "http_session", None),
|
||||
@@ -88,7 +99,7 @@ def _build_app_context(request: Request) -> ApplicationContext:
|
||||
last_activation=getattr(state, "last_activation", None),
|
||||
runtime_settings=getattr(state, "runtime_settings", None),
|
||||
runtime_state=state.runtime_state,
|
||||
session_cache=getattr(state, "session_cache", None),
|
||||
session_cache=session_cache,
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user