From a4a8b43c962d8fc798bd3fe3dfc26a40c42b209d Mon Sep 17 00:00:00 2001
From: Bjarke Madsen <bjarke.madsen@geant.org>
Date: Fri, 2 Jul 2021 13:17:03 +0200
Subject: [PATCH] refactor request wrapper for logging

---
 .../grafana/utils/request.py                  | 63 ++++++++-----------
 1 file changed, 27 insertions(+), 36 deletions(-)

diff --git a/brian_dashboard_manager/grafana/utils/request.py b/brian_dashboard_manager/grafana/utils/request.py
index d55dc87..d1c5452 100644
--- a/brian_dashboard_manager/grafana/utils/request.py
+++ b/brian_dashboard_manager/grafana/utils/request.py
@@ -1,4 +1,8 @@
 import requests
+import logging
+from requests.models import HTTPError
+
+logger = logging.getLogger(__name__)
 
 
 class Request(object):
@@ -11,47 +15,34 @@ class Request(object):
 
         self.BASE_URL = url
 
-    def get(self, endpoint: str, headers=None, **kwargs):
-
-        r = requests.get(
-            self.BASE_URL + endpoint,
-            headers={**headers, **self.headers} if headers else self.headers,
-            **kwargs
-        )
-        r.raise_for_status()
+    def do_request(self, method, endpoint, *args, **kwargs):
+        r = requests.request(method, self.BASE_URL + endpoint,
+                             *args,
+                             **kwargs,
+                             headers={
+                                 **kwargs.get('headers', {}),
+                                 **self.headers
+                             })
+
+        try:
+            r.raise_for_status()
+        except HTTPError as e:
+            if e.response.status_code < 500:
+                logger.error(e.response.content.decode('utf-8'))
+            raise e
         return r.json()
 
-    def post(self, endpoint: str, headers=None, **kwargs):
+    def get(self, endpoint: str, *args, **kwargs):
+        return self.do_request('get', endpoint, *args, **kwargs)
 
-        r = requests.post(
-            self.BASE_URL + endpoint,
-            headers={**headers, **self.headers} if headers else self.headers,
-            **kwargs
-        )
-        r.raise_for_status()
+    def post(self, endpoint: str, data=None, **kwargs):
+        return self.do_request('post', endpoint, data=data, **kwargs)
 
-        return r.json()
+    def put(self, endpoint: str, **kwargs):
+        return self.do_request('put', endpoint, **kwargs)
 
-    def put(self, endpoint: str, headers=None, **kwargs):
-
-        r = requests.put(
-            self.BASE_URL + endpoint,
-            headers={**headers, **self.headers} if headers else self.headers,
-            **kwargs
-        )
-        r.raise_for_status()
-        return r.json()
-
-    def delete(self, endpoint: str, headers=None, **kwargs):
-
-        r = requests.delete(
-            self.BASE_URL + endpoint,
-            headers={**headers, **self.headers} if headers else self.headers,
-            **kwargs
-        )
-        r.raise_for_status()
-
-        return r.json()
+    def delete(self, endpoint: str, **kwargs):
+        return self.do_request('delete', endpoint, **kwargs)
 
 
 class AdminRequest(Request):
-- 
GitLab