diff --git a/lib/galaxy/web/framework/base.py b/lib/galaxy/web/framework/base.py index 276ac0b52d5d..decd75a633db 100644 --- a/lib/galaxy/web/framework/base.py +++ b/lib/galaxy/web/framework/base.py @@ -171,9 +171,11 @@ def __call__(self, environ, start_response): try: self._model.set_request_id(request_id) # Start SQLAlchemy session scope + self._install_model.set_request_id(request_id) return self.handle_request(request_id, path_info, environ, start_response) finally: self._model.unset_request_id(request_id) # End SQLAlchemy session scope + self._install_model.unset_request_id(request_id) # End SQLAlchemy session scope self.trace(message="Handle request finished") if self.trace_logger: self.trace_logger.context_remove("request_id") diff --git a/lib/galaxy/webapps/base/webapp.py b/lib/galaxy/webapps/base/webapp.py index b07a424e06f3..6fdcff60cd24 100644 --- a/lib/galaxy/webapps/base/webapp.py +++ b/lib/galaxy/webapps/base/webapp.py @@ -121,6 +121,7 @@ def __init__( # We need this to set the REQUEST_ID contextvar in model.base *BEFORE* a GalaxyWebTransaction is created. # This will ensure a SQLAlchemy session is request-scoped for legacy (non-fastapi) endpoints. self._model = galaxy_app.model + self._install_model = getattr(galaxy_app, "install_model", None) def build_apispec(self): """ diff --git a/lib/galaxy/webapps/galaxy/api/__init__.py b/lib/galaxy/webapps/galaxy/api/__init__.py index 66e12cc4fd9b..5c78cccfb7fb 100644 --- a/lib/galaxy/webapps/galaxy/api/__init__.py +++ b/lib/galaxy/webapps/galaxy/api/__init__.py @@ -98,10 +98,12 @@ async def get_app_with_request_session() -> AsyncGenerator[StructuredApp, None]: app = get_app() request_id = request_context.data["X-Request-ID"] app.model.set_request_id(request_id) + app.install_model.set_request_id(request_id) try: yield app finally: app.model.unset_request_id(request_id) + app.install_model.unset_request_id(request_id) DependsOnApp = cast(StructuredApp, Depends(get_app_with_request_session))