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