Merge pull request #8 from thouveng/use-json-for-basic-auth

Use JSON format with basic auth
diff --git a/_states/grafana3_datasource.py b/_states/grafana3_datasource.py
index fd41d86..3ac5338 100644
--- a/_states/grafana3_datasource.py
+++ b/_states/grafana3_datasource.py
@@ -40,6 +40,7 @@
 '''
 from __future__ import absolute_import
 
+import json
 import requests
 
 from salt.ext.six import string_types
@@ -115,20 +116,13 @@
                           is_default=is_default)
 
     if datasource:
-        if profile.get('grafana_token', False):
-            requests.put(
-                _get_url(profile, datasource['id']),
-                data,
-                headers=_get_headers(profile),
-                timeout=profile.get('grafana_timeout', 3),
-            )
-        else:
-            requests.put(
-                _get_url(profile, datasource['id']),
-                data,
-                auth=_get_auth(profile),
-                timeout=profile.get('grafana_timeout', 3),
-            )
+        requests.put(
+            _get_url(profile, datasource['id']),
+            data=json.dumps(data),
+            auth=_get_auth(profile),
+            headers=_get_headers(profile),
+            timeout=profile.get('grafana_timeout', 3),
+        )
         ret['result'] = True
         ret['changes'] = _diff(datasource, data)
         if ret['changes']['new'] or ret['changes']['old']:
@@ -137,20 +131,13 @@
             ret['changes'] = None
             ret['comment'] = 'Data source {0} already up-to-date'.format(name)
     else:
-        if profile.get('grafana_token', False):
-            requests.post(
-                '{0}/api/datasources'.format(profile['grafana_url']),
-                data,
-                headers=_get_headers(profile),
-                timeout=profile.get('grafana_timeout', 3),
-            )
-        else:
-            requests.post(
-                '{0}/api/datasources'.format(profile['grafana_url']),
-                data,
-                auth=_get_auth(profile),
-                timeout=profile.get('grafana_timeout', 3),
-            )
+        requests.post(
+            '{0}/api/datasources'.format(profile['grafana_url']),
+            data=json.dumps(data),
+            auth=_get_auth(profile),
+            headers=_get_headers(profile),
+            timeout=profile.get('grafana_timeout', 3),
+        )
         ret['result'] = True
         ret['comment'] = 'New data source {0} added'.format(name)
         ret['changes'] = data
@@ -176,18 +163,12 @@
         ret['comment'] = 'Data source {0} already absent'.format(name)
         return ret
 
-    if profile.get('grafana_token', False):
-        requests.delete(
-            _get_url(profile, datasource['id']),
-            headers=_get_headers(profile),
-            timeout=profile.get('grafana_timeout', 3),
-        )
-    else:
-        requests.delete(
-            _get_url(profile, datasource['id']),
-            auth=_get_auth(profile),
-            timeout=profile.get('grafana_timeout', 3),
-        )
+    requests.delete(
+        _get_url(profile, datasource['id']),
+        auth=_get_auth(profile),
+        headers=_get_headers(profile),
+        timeout=profile.get('grafana_timeout', 3),
+    )
 
     ret['result'] = True
     ret['comment'] = 'Data source {0} was deleted'.format(name)
@@ -203,18 +184,12 @@
 
 
 def _get_datasource(profile, name):
-    if profile.get('grafana_token', False):
-        response = requests.get(
-            '{0}/api/datasources'.format(profile['grafana_url']),
-            headers=_get_headers(profile),
-            timeout=profile.get('grafana_timeout', 3),
-        )
-    else:
-        response = requests.get(
-            '{0}/api/datasources'.format(profile['grafana_url']),
-            auth=_get_auth(profile),
-            timeout=profile.get('grafana_timeout', 3),
-        )
+    response = requests.get(
+        '{0}/api/datasources'.format(profile['grafana_url']),
+        auth=_get_auth(profile),
+        headers=_get_headers(profile),
+        timeout=profile.get('grafana_timeout', 3),
+    )
     data = response.json()
     for datasource in data:
         if datasource['name'] == name:
@@ -223,13 +198,19 @@
 
 
 def _get_headers(profile):
-    return {
-        'Accept': 'application/json',
-        'Authorization': 'Bearer {0}'.format(profile['grafana_token'])
-    }
+
+    headers = {'Content-type': 'application/json'}
+
+    if profile.get('grafana_token', False):
+        headers['Authorization'] = 'Bearer {0}'.format(profile['grafana_token'])
+
+    return headers
 
 
 def _get_auth(profile):
+    if profile.get('grafana_token', False):
+        return None
+
     return requests.auth.HTTPBasicAuth(
         profile['grafana_user'],
         profile['grafana_password']