From 221b3f75d8c2804b2cab627bb139159bcd8498af Mon Sep 17 00:00:00 2001
From: Bjarke Madsen <bjarke.madsen@geant.org>
Date: Mon, 25 Jan 2021 17:53:36 +0100
Subject: [PATCH] add grafana API request utils

---
 brian_dashboard_manager/grafana/__init__.py   |  3 --
 .../grafana/utils/__init__.py                 |  0
 .../grafana/utils/request.py                  | 29 ++++++++++++-------
 requirements.txt                              |  2 ++
 4 files changed, 21 insertions(+), 13 deletions(-)
 create mode 100644 brian_dashboard_manager/grafana/utils/__init__.py

diff --git a/brian_dashboard_manager/grafana/__init__.py b/brian_dashboard_manager/grafana/__init__.py
index a39afea..e69de29 100644
--- a/brian_dashboard_manager/grafana/__init__.py
+++ b/brian_dashboard_manager/grafana/__init__.py
@@ -1,3 +0,0 @@
-from brian_dashboard_manager.grafana.provision import provision
-
-__all__ = ["provision"]
\ No newline at end of file
diff --git a/brian_dashboard_manager/grafana/utils/__init__.py b/brian_dashboard_manager/grafana/utils/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/brian_dashboard_manager/grafana/utils/request.py b/brian_dashboard_manager/grafana/utils/request.py
index a34d541..db29319 100644
--- a/brian_dashboard_manager/grafana/utils/request.py
+++ b/brian_dashboard_manager/grafana/utils/request.py
@@ -1,6 +1,5 @@
 import requests
-from typing import Dict, Any
-from flask import current_app
+import json
 
 
 class Request(object):
@@ -21,7 +20,10 @@ class Request(object):
             **kwargs
         )
         r.raise_for_status()
-        return r.json()
+        try:
+            return r.json()
+        except json.JSONDecodeError:
+            return None
 
     def post(self, endpoint: str, headers=None, **kwargs):
 
@@ -31,7 +33,10 @@ class Request(object):
             **kwargs
         )
         r.raise_for_status()
-        return r.json()
+        try:
+            return r.json()
+        except json.JSONDecodeError:
+            return None
 
     def delete(self, endpoint: str, headers=None, **kwargs):
 
@@ -41,23 +46,27 @@ class Request(object):
             **kwargs
         )
         r.raise_for_status()
-        return r.json()
+        try:
+            return r.json()
+        except json.JSONDecodeError:
+            return None
 
 
 class AdminRequest(Request):
-    def __init__(self, hostname, port, username, password):
-        self.username = username
-        super().__init__(f'http://{username}:{password}@{hostname}:{port}/')
+    def __init__(self, hostname, grafana_port, admin_username, admin_password, **kwargs):
+        self.username = admin_username
+        super().__init__(
+            f'http://{admin_username}:{admin_password}@{hostname}:{grafana_port}/')
 
     def __str__(self):
         return f'admin user: {self.username}'
 
 
 class TokenRequest(Request):
-    def __init__(self, hostname, port, token: str):
+    def __init__(self, hostname, grafana_port, token: str, **kwargs):
         self.token = token
 
-        super().__init__(f'http://{hostname}:{port}/', {
+        super().__init__(f'http://{hostname}:{grafana_port}/', {
             'Authorization': 'Bearer ' + token
         })
 
diff --git a/requirements.txt b/requirements.txt
index 48c54a2..d04fa58 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,3 +2,5 @@ requests
 jsonschema
 flask
 pytest
+pytest-mock
+responses
-- 
GitLab