Skip to content

Commit 1cdfc7c

Browse files
authored
handle errors more uniformly in Cromwell shim layer (#587)
1 parent a8f4b2d commit 1cdfc7c

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

servers/cromwell/jobs/controllers/jobs_controller.py

+28-23
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import requests
22
from flask import current_app
3-
from werkzeug.exceptions import Unauthorized, BadRequest, NotFound, InternalServerError, ServiceUnavailable
3+
from werkzeug.exceptions import BadRequest, Forbidden, InternalServerError, NotFound, ServiceUnavailable, Unauthorized
44
from datetime import datetime
55
from dateutil.tz import *
66
import dateutil.parser
@@ -45,8 +45,8 @@ def abort_job(id, **kwargs):
4545
cromwell_url=_get_base_url(), id=id)
4646
response = requests.post(
4747
url, auth=kwargs.get('auth'), headers=kwargs.get('auth_headers'))
48-
if response.status_code == NotFound.code:
49-
raise NotFound(response.json()['message'])
48+
if response.status_code != 200:
49+
handle_error(response)
5050

5151

5252
@requires_auth
@@ -70,13 +70,8 @@ def update_job_labels(id, body, **kwargs):
7070
auth=kwargs.get('auth'),
7171
headers=kwargs.get('auth_headers'))
7272

73-
if response.status_code == InternalServerError.code:
74-
raise InternalServerError(_get_response_message(response))
75-
elif response.status_code == BadRequest.code:
76-
raise BadRequest(_get_response_message(response))
77-
elif response.status_code == NotFound.code:
78-
raise NotFound(_get_response_message(response))
79-
response.raise_for_status()
73+
if response.status_code != 200:
74+
handle_error(response)
8075

8176
# Follow API spec
8277
result = response.json()
@@ -97,13 +92,11 @@ def get_job(id, **kwargs):
9792
cromwell_url=_get_base_url(), id=id)
9893
response = requests.get(
9994
url, auth=kwargs.get('auth'), headers=kwargs.get('auth_headers'))
95+
96+
if response.status_code != 200:
97+
handle_error(response)
98+
10099
job = response.json()
101-
if response.status_code == BadRequest.code:
102-
raise BadRequest(job.get('message'))
103-
elif response.status_code == NotFound.code:
104-
raise NotFound(job.get('message'))
105-
elif response.status_code == InternalServerError.code:
106-
raise InternalServerError(job.get('message'))
107100

108101
failures = [
109102
format_failure(name, m)
@@ -320,13 +313,8 @@ def query_jobs(body, **kwargs):
320313
auth=auth,
321314
headers=headers)
322315

323-
if response.status_code == BadRequest.code:
324-
raise BadRequest(_get_response_message(response))
325-
elif response.status_code == Unauthorized.code:
326-
raise Unauthorized(_get_response_message(response))
327-
elif response.status_code == InternalServerError.code:
328-
raise InternalServerError(_get_response_message(response))
329-
response.raise_for_status()
316+
if response.status_code != 200:
317+
handle_error(response)
330318

331319
total_results = int(response.json()['totalResultsCount'])
332320
last_page = get_last_page(total_results, query_page_size)
@@ -420,6 +408,23 @@ def format_job(job, now):
420408
extensions=ExtendedFields(parent_job_id=job.get('parentWorkflowId')))
421409

422410

411+
def handle_error(response):
412+
if response.status_code == BadRequest.code:
413+
raise BadRequest(_get_response_message(response))
414+
elif response.status_code == Forbidden.code:
415+
raise Forbidden(_get_response_message(response))
416+
elif response.status_code == InternalServerError.code:
417+
raise InternalServerError(_get_response_message(response))
418+
elif response.status_code == NotFound.code:
419+
raise NotFound(_get_response_message(response))
420+
elif response.status_code == ServiceUnavailable.code:
421+
raise ServiceUnavailable(_get_response_message(response))
422+
elif response.status_code == Unauthorized.code:
423+
raise Unauthorized(_get_response_message(response))
424+
425+
response.raise_for_status()
426+
427+
423428
def _parse_datetime(date_string):
424429
if not date_string:
425430
return None

0 commit comments

Comments
 (0)