2424from ..utils import compose_support_error_msg
2525from ..utils_aiohttp import create_redirect_to_page_response , get_api_base_url
2626from ._catalog import ValidService , validate_requested_service
27- from ._constants import MSG_GUESTS_NOT_ALLOWED , MSG_UNEXPECTED_DISPATCH_ERROR
27+ from ._constants import MSG_UNEXPECTED_DISPATCH_ERROR
2828from ._core import validate_requested_file , validate_requested_viewer
2929from ._errors import (
3030 FileToLargeError ,
@@ -92,6 +92,50 @@ def _create_service_info_from(service: ValidService) -> ServiceInfo:
9292 return ServiceInfo .model_construct (_fields_set = set (values_map .keys ()), ** values_map )
9393
9494
95+ def _create_error_redirect_with_logging (
96+ request : web .Request ,
97+ err : Exception ,
98+ * ,
99+ message : str ,
100+ status_code : int ,
101+ tip : str | None = None ,
102+ ) -> web .HTTPFound :
103+ """Helper to create error redirect with consistent logging"""
104+ error_code = create_error_code (err )
105+ user_error_msg = compose_support_error_msg (msg = message , error_code = error_code )
106+
107+ _logger .exception (
108+ ** create_troubleshootting_log_kwargs (
109+ user_error_msg ,
110+ error = err ,
111+ error_code = error_code ,
112+ error_context = create_error_context_from_request (request ),
113+ tip = tip ,
114+ )
115+ )
116+
117+ return _create_redirect_response_to_error_page (
118+ request .app ,
119+ message = user_error_msg ,
120+ status_code = status_code ,
121+ )
122+
123+
124+ def _create_simple_error_redirect (
125+ request : web .Request ,
126+ err : Exception ,
127+ * ,
128+ status_code : int ,
129+ ) -> web .HTTPFound :
130+ """Helper to create simple error redirect without logging"""
131+ user_error_msg = f"Sorry, we cannot dispatch your study: { err } "
132+ return _create_redirect_response_to_error_page (
133+ request .app ,
134+ message = user_error_msg ,
135+ status_code = status_code ,
136+ )
137+
138+
95139def _handle_errors_with_error_page (handler : Handler ):
96140 @functools .wraps (handler )
97141 async def wrapper (request : web .Request ) -> web .StreamResponse :
@@ -105,29 +149,21 @@ async def wrapper(request: web.Request) -> web.StreamResponse:
105149 except GuestUserNotAllowedError as err :
106150 raise _create_redirect_response_to_error_page (
107151 request .app ,
108- message = MSG_GUESTS_NOT_ALLOWED ,
152+ message = user_message (
153+ "Access is restricted to registered users.<br/><br/>"
154+ "If you don't have an account, please contact support to request one.<br/><br/>" ,
155+ _version = 1 ,
156+ ),
109157 status_code = status .HTTP_401_UNAUTHORIZED ,
110158 ) from err
111159
112160 except ProjectWorkbenchMismatchError as err :
113- error_code = create_error_code (err )
114-
115- user_error_msg = compose_support_error_msg (
116- msg = MSG_UNEXPECTED_DISPATCH_ERROR , error_code = error_code
117- )
118- _logger .exception (
119- ** create_troubleshootting_log_kwargs (
120- user_error_msg ,
121- error = err ,
122- error_code = error_code ,
123- error_context = create_error_context_from_request (request ),
124- tip = "project might be corrupted" ,
125- )
126- )
127- raise _create_redirect_response_to_error_page (
128- request .app ,
129- message = user_error_msg ,
161+ raise _create_error_redirect_with_logging (
162+ request ,
163+ err ,
164+ message = MSG_UNEXPECTED_DISPATCH_ERROR ,
130165 status_code = status .HTTP_500_INTERNAL_SERVER_ERROR ,
166+ tip = "project might be corrupted" ,
131167 ) from err
132168
133169 except (
@@ -136,92 +172,48 @@ async def wrapper(request: web.Request) -> web.StreamResponse:
136172 IncompatibleServiceError ,
137173 GuestUsersLimitError ,
138174 ) as err :
139- user_error_msg = f"Sorry, we cannot dispatch your study: { err } "
140- raise _create_redirect_response_to_error_page (
141- request .app ,
142- message = user_error_msg ,
143- status_code = status .HTTP_422_UNPROCESSABLE_ENTITY , # 422
175+ raise _create_simple_error_redirect (
176+ request ,
177+ err ,
178+ status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
144179 ) from err
145180
146181 except (InvalidRedirectionParamsError , web .HTTPUnprocessableEntity ) as err :
147182 # Validation error in query parameters
148- error_code = create_error_code (err )
149- user_error_msg = compose_support_error_msg (
150- msg = user_message (
183+ raise _create_error_redirect_with_logging (
184+ request ,
185+ err ,
186+ message = user_message (
151187 "The link you provided is invalid because it doesn't contain any or invalid information related to data or a service."
152188 "Please check the link and make sure it is correct."
153189 ),
154- error_code = error_code ,
155- )
156-
157- _logger .exception (
158- ** create_troubleshootting_log_kwargs (
159- user_error_msg ,
160- error = err ,
161- error_code = error_code ,
162- error_context = create_error_context_from_request (request ),
163- tip = "The link might be corrupted" ,
164- )
165- )
166-
167- raise _create_redirect_response_to_error_page (
168- request .app ,
169- message = user_error_msg ,
170190 status_code = status .HTTP_422_UNPROCESSABLE_ENTITY ,
191+ tip = "The link might be corrupted" ,
171192 ) from err
172193
173194 except web .HTTPClientError as err :
174- error_code = create_error_code (err )
175- user_error_msg = compose_support_error_msg (
176- msg = "Fatal error while redirecting request" , error_code = error_code
177- )
178-
179- _logger .exception (
180- ** create_troubleshootting_log_kwargs (
181- user_error_msg ,
182- error = err ,
183- error_code = error_code ,
184- error_context = {
185- ** create_error_context_from_request (request ),
186- "reason" : err .reason ,
187- "status" : err .status ,
188- },
189- tip = "The link might be corrupted" ,
190- )
191- )
192-
193- raise _create_redirect_response_to_error_page (
194- request .app ,
195- message = err .reason ,
195+ raise _create_error_redirect_with_logging (
196+ request ,
197+ err ,
198+ message = "Fatal error while redirecting request" ,
196199 status_code = err .status_code ,
200+ tip = "The link might be corrupted" ,
197201 ) from err
198202
199203 except (ValidationError , web .HTTPServerError , Exception ) as err :
200- error_code = create_error_code (err )
201-
202- user_error_msg = compose_support_error_msg (
203- msg = MSG_UNEXPECTED_DISPATCH_ERROR , error_code = error_code
204- )
205- _logger .exception (
206- ** create_troubleshootting_log_kwargs (
207- user_error_msg ,
208- error = err ,
209- error_code = error_code ,
210- error_context = create_error_context_from_request (request ),
211- tip = "Unexpected failure while dispatching study" ,
212- )
213- )
214- raise _create_redirect_response_to_error_page (
215- request .app ,
216- message = user_error_msg ,
204+ raise _create_error_redirect_with_logging (
205+ request ,
206+ err ,
207+ message = MSG_UNEXPECTED_DISPATCH_ERROR ,
217208 status_code = status .HTTP_500_INTERNAL_SERVER_ERROR ,
209+ tip = "Unexpected failure while dispatching study" ,
218210 ) from err
219211
220212 return wrapper
221213
222214
223215#
224- # API Schemas
216+ # API ScheMAS
225217#
226218
227219
0 commit comments