1717from servicelib .logging_errors import create_troubleshootting_log_kwargs
1818
1919from ..dynamic_scheduler import api as dynamic_scheduler_service
20+ from ..exception_handling import create_error_context_from_request
2021from ..products import products_web
2122from ..utils import compose_support_error_msg
2223from ..utils_aiohttp import create_redirect_to_page_response , get_api_base_url
2324from ._catalog import ValidService , validate_requested_service
24- from ._constants import MSG_UNEXPECTED_DISPATCH_ERROR
25+ from ._constants import MSG_GUESTS_NOT_ALLOWED , MSG_UNEXPECTED_DISPATCH_ERROR
2526from ._core import validate_requested_file , validate_requested_viewer
26- from ._errors import InvalidRedirectionParamsError , StudyDispatcherError
27+ from ._errors import (
28+ GuestUserNotAllowedError ,
29+ InvalidRedirectionParamsError ,
30+ StudyDispatcherError ,
31+ )
2732from ._models import FileParams , ServiceInfo , ServiceParams , ViewerInfo
2833from ._projects import (
2934 get_or_create_project_with_file ,
@@ -92,29 +97,63 @@ async def wrapper(request: web.Request) -> web.StreamResponse:
9297 # NOTE: that response is a redirection that is reraised and not returned
9398 raise
9499
95- except StudyDispatcherError as err :
100+ except GuestUserNotAllowedError as err :
96101 raise _create_redirect_response_to_error_page (
97102 request .app ,
98- message = f"Sorry, we cannot dispatch your study: { err } " ,
99- status_code = status .HTTP_422_UNPROCESSABLE_ENTITY , # 422
103+ message = MSG_GUESTS_NOT_ALLOWED ,
104+ status_code = status .HTTP_401_UNAUTHORIZED ,
100105 ) from err
101106
102- except web . HTTPUnauthorized as err :
107+ except StudyDispatcherError as err :
103108 raise _create_redirect_response_to_error_page (
104109 request .app ,
105- message = f"{ err . text } . Please reload this page to login/register. " ,
106- status_code = err . status_code ,
110+ message = f"Sorry, we cannot dispatch your study: { err } " ,
111+ status_code = status . HTTP_422_UNPROCESSABLE_ENTITY , # 422
107112 ) from err
108113
109114 except web .HTTPUnprocessableEntity as err :
115+ # Validation error in query parameters
116+ error_code = create_error_code (err )
117+ user_error_msg = compose_support_error_msg (
118+ msg = "Invalid query parameters in link" , error_code = error_code
119+ )
120+
121+ _logger .exception (
122+ ** create_troubleshootting_log_kwargs (
123+ user_error_msg ,
124+ error = err ,
125+ error_code = error_code ,
126+ error_context = create_error_context_from_request (request ),
127+ tip = "The link might be corrupted" ,
128+ )
129+ )
130+
110131 raise _create_redirect_response_to_error_page (
111132 request .app ,
112- message = f"Invalid parameters in link: { err . text } " ,
113- status_code = status .HTTP_422_UNPROCESSABLE_ENTITY , # 422
133+ message = user_error_msg ,
134+ status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
114135 ) from err
115136
116137 except web .HTTPClientError as err :
117- _logger .exception ("Client error with status code %d" , err .status_code )
138+ error_code = create_error_code (err )
139+ user_error_msg = compose_support_error_msg (
140+ msg = "Fatal error while redirecting request" , error_code = error_code
141+ )
142+
143+ _logger .exception (
144+ ** create_troubleshootting_log_kwargs (
145+ user_error_msg ,
146+ error = err ,
147+ error_code = error_code ,
148+ error_context = {
149+ ** create_error_context_from_request (request ),
150+ "reason" : err .reason ,
151+ "status" : err .status ,
152+ },
153+ tip = "The link might be corrupted" ,
154+ )
155+ )
156+
118157 raise _create_redirect_response_to_error_page (
119158 request .app ,
120159 message = err .reason ,
@@ -132,7 +171,7 @@ async def wrapper(request: web.Request) -> web.StreamResponse:
132171 user_error_msg ,
133172 error = err ,
134173 error_code = error_code ,
135- error_context = { " request" : request } ,
174+ error_context = create_error_context_from_request ( request ) ,
136175 tip = "Unexpected failure while dispatching study" ,
137176 )
138177 )
0 commit comments