From edea412ee3d60c5a7e8d6532f5d24a3d45058a01 Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Thu, 26 Jul 2018 09:37:12 -0500 Subject: [PATCH] Trying to make API exceptions look nicer --- config/settings/base.py | 2 ++ gracedb/superevents/api/exceptions.py | 15 +++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index de9fe50ab..8a21cd457 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -337,6 +337,8 @@ REST_FRAMEWORK = { 'events.api.backends.LigoAuthentication', ), 'COERCE_DECIMAL_TO_STRING': False, + 'EXCEPTION_HANDLER': + 'superevents.api.exceptions.gracedb_exception_handler', } # Location of packages installed by bower diff --git a/gracedb/superevents/api/exceptions.py b/gracedb/superevents/api/exceptions.py index 8fb598697..32ede5de4 100644 --- a/gracedb/superevents/api/exceptions.py +++ b/gracedb/superevents/api/exceptions.py @@ -8,11 +8,14 @@ def gracedb_exception_handler(exc, context): # to get the standard error response. response = exception_handler(exc, context) - # Now add the HTTP status code to the response. - if response is not None: - if response.data.has_key('detail'): - response.data['detail'] = [] - for a in exc.args: - response.data['detail'].append(a) + # Combine values into one list + exc_out = [item for sublist in exc.detail.values() for item in sublist] + + # For only one exception, just print it rather than the list + if len(exc_out) == 1: + exc_out = exc_out[0] + + # Update response data + response.data = exc_out return response -- GitLab