summaryrefslogtreecommitdiffstats
path: root/dashboard/dashboard_api/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'dashboard/dashboard_api/api.py')
-rw-r--r--dashboard/dashboard_api/api.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/dashboard/dashboard_api/api.py b/dashboard/dashboard_api/api.py
new file mode 100644
index 0000000..d40e0aa
--- /dev/null
+++ b/dashboard/dashboard_api/api.py
@@ -0,0 +1,91 @@
+##############################################################################
+# Copyright (c) 2016 Max Breitenfeldt and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+
+import logging
+
+import requests
+
+URLS = {
+ 'resources': '/api/resources/',
+ 'servers': '/api/servers/',
+ 'bookings': '/api/bookings',
+ 'resource_status': '/api/resource_status/',
+}
+
+class DashboardAPI(object):
+ def __init__(self, dashboard_url, api_token='', verbose=False):
+ self._api_token = api_token
+ self._verbose = verbose
+ self._resources_url = dashboard_url + URLS['resources']
+ self._servers_url = dashboard_url + URLS['servers']
+ self._bookings_url = dashboard_url + URLS['bookings']
+ self._resources_status_url = dashboard_url + URLS['resource_status']
+ self._logger = logging.getLogger(__name__)
+
+ def get_all_resources(self):
+ return self._get_json(self._resources_url)
+
+ def get_resource(self, id='', name='', url=''):
+ if url != '':
+ return self._get_json(url)[0]
+ url = self._resources_url + self._url_parameter(id=id, name=name)
+ return self._get_json(url)[0]
+
+ def get_all_bookings(self):
+ return self._get_json(self._bookings_url)
+
+ def get_resource_bookings(self, resource_id):
+ url = self._bookings_url + self._url_parameter(resource_id=resource_id)
+ return self._get_json(url)
+
+ def get_booking(self, id):
+ url = self._bookings_url + self._url_parameter(id=id)
+ return self._get_json(url)[0]
+
+ def post_resource_status(self, resource_id, type, title, content):
+ data = {
+ 'resource': resource_id,
+ 'type': type,
+ 'title': title,
+ 'content': content
+ }
+ return self._post_json(self._resources_status_url, data)
+
+ def get_url(self, url):
+ return self._get_json(url)
+
+ def _url_parameter(self, **kwargs):
+ res = ''
+ prefix = '?'
+ for key, val in kwargs.items():
+ res += prefix + key + '=' + str(val)
+ prefix = '&'
+ return res
+
+ def _get_json(self, url):
+ try:
+ response = requests.get(url)
+ if self._verbose:
+ print('Get JSON: ' + url)
+ print(response.status_code, response.content)
+ return response.json()
+ except requests.exceptions.RequestException as e:
+ self._logger.exception(e)
+ except ValueError as e:
+ self._logger.exception(e)
+
+ def _post_json(self, url, json):
+ if self._api_token == '':
+ raise Exception('Need api token to POST data.')
+ response = requests.post(url, json, headers={'Authorization': 'Token ' + self._api_token})
+ if self._verbose:
+ print('Post JSON: ' + url)
+ print(response.status_code, response.content)
+ return response.status_code