Skip to content

Commit fa682f8

Browse files
committed
adds error handlers
1 parent e0eb10a commit fa682f8

File tree

1 file changed

+28
-16
lines changed
  • services/api-server/src/simcore_service_api_server/services

1 file changed

+28
-16
lines changed

services/api-server/src/simcore_service_api_server/services/director_v2.py

+28-16
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def _handle_errors_context(project_id: UUID):
104104
) from err
105105

106106
except httpx.TimeoutException as err:
107+
# TODO: refer resource?
107108
oec = create_error_code(err)
108109
err_detail = (
109110
f"Service handling job operation on '{project_id}' timed out [{oec}]"
@@ -121,6 +122,21 @@ def _handle_errors_context(project_id: UUID):
121122
detail=err_detail,
122123
) from err
123124

125+
except httpx.HTTPError as err:
126+
oec = create_error_code(err)
127+
err_detail = f"Unexpected error while processing job '{project_id}' [{oec}]"
128+
_logger.exception(
129+
"%s: %s",
130+
err_detail,
131+
to_httpx_command(err.request),
132+
extra={"error_code": oec},
133+
)
134+
135+
raise HTTPException(
136+
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
137+
detail=err_detail,
138+
) from err
139+
124140

125141
class DirectorV2Api(BaseServiceClientApi):
126142
async def create_computation(
@@ -129,17 +145,18 @@ async def create_computation(
129145
user_id: PositiveInt,
130146
product_name: str,
131147
) -> ComputationTaskGet:
132-
response = await self.client.post(
133-
"/v2/computations",
134-
json={
135-
"user_id": user_id,
136-
"project_id": str(project_id),
137-
"start_pipeline": False,
138-
"product_name": product_name,
139-
},
140-
)
141-
response.raise_for_status()
142-
return ComputationTaskGet(**response.json())
148+
with _handle_errors_context(project_id):
149+
response = await self.client.post(
150+
"/v2/computations",
151+
json={
152+
"user_id": user_id,
153+
"project_id": str(project_id),
154+
"start_pipeline": False,
155+
"product_name": product_name,
156+
},
157+
)
158+
response.raise_for_status()
159+
return ComputationTaskGet(**response.json())
143160

144161
async def start_computation(
145162
self,
@@ -149,11 +166,8 @@ async def start_computation(
149166
groups_extra_properties_repository: GroupsExtraPropertiesRepository,
150167
cluster_id: ClusterID | None = None,
151168
) -> ComputationTaskGet:
152-
153169
with _handle_errors_context(project_id):
154-
155170
extras = {}
156-
157171
use_on_demand_clusters = (
158172
await groups_extra_properties_repository.use_on_demand_clusters(
159173
user_id, product_name
@@ -180,9 +194,7 @@ async def start_computation(
180194
async def get_computation(
181195
self, project_id: UUID, user_id: PositiveInt
182196
) -> ComputationTaskGet:
183-
184197
with _handle_errors_context(project_id):
185-
186198
response = await self.client.get(
187199
f"/v2/computations/{project_id}",
188200
params={

0 commit comments

Comments
 (0)