diff options
author | sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> | 2020-11-29 14:45:48 +0100 |
---|---|---|
committer | sternenseemann <git@lukasepple.de> | 2020-11-29 15:17:07 +0100 |
commit | 81b466cd24fee1a555527a3aebe465d9882abf22 (patch) | |
tree | f28dba1c1376472620bc6e929f760e70666a45aa | |
parent | cac3ad5fb54f94a804397810fb2a2c5fbc7ffdfd (diff) |
feat(clients): add python client library for REST API
-rw-r--r-- | clients/py/flipdot_gschichtler/__init__.py | 63 | ||||
-rw-r--r-- | clients/py/setup.py | 9 | ||||
-rw-r--r-- | nix/python-flipdot-gschichtler.nix | 24 |
3 files changed, 96 insertions, 0 deletions
diff --git a/clients/py/flipdot_gschichtler/__init__.py b/clients/py/flipdot_gschichtler/__init__.py new file mode 100644 index 0000000..b78663f --- /dev/null +++ b/clients/py/flipdot_gschichtler/__init__.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +import requests + +class FlipdotGschichtlerError(Exception): + """Error from the REST API""" + def __init__(self, endpoint, status, message): + self.endpoint = endpoint + self.status = status + self.message = message + +class FlipdotGschichtlerClient(): + def __init__(self, base_url, api_token = None): + self.base_url = base_url + self.api_token = api_token + + def __get_error_message(self, r): + try: + return r.json()['error'] + except KeyError: + return 'no message given' + except ValueError: + return 'no json response' + + def add(self, text): + endpoint = '/api/v2/queue/add' + r = requests.post(self.base_url + endpoint, data = { 'text' : text }) + + if r.status_code == 200: + return r.json()['id'] + else: + message = self.__get_error_message(r) + raise FlipdotGschichtlerError(endpoint, r.status_code, message) + + def delete(self, queue_id): + if self.api_token is None: + raise Exception('missing api token') + + endpoint = '/api/v2/queue/' + str(queue_id) + r = requests.delete(self.base_url + endpoint, data = { 'token': self.api_token }) + + if r.status_code != 204: + message = self.__get_error_message(r) + raise FlipdotGschichtlerError(endpoint, r.status_code, message) + + def queue(self): + endpoint = '/api/v2/queue' + r = requests.get(self.base_url + endpoint) + + if r.status_code == 200: + return r.json()['queue'] + else: + message = self.__get_error_message(r) + raise FlipdotGschichtlerClient(endpoint, r.status_code, message) + + def queue_length(self): + endpoint = '/api/v2/queue' + r = requests.get(self.base_url + endpoint) + + if r.status_code == 200: + return r.json()['length'] + else: + message = self.__get_error_message(r) + raise FlipdotGschichtlerClient(endpoint, r.status_code, message) diff --git a/clients/py/setup.py b/clients/py/setup.py new file mode 100644 index 0000000..70711ec --- /dev/null +++ b/clients/py/setup.py @@ -0,0 +1,9 @@ +from setuptools import setup + +setup( + name = 'flipdot-gschichtler', + version = '2.0.0', + packages = [ 'flipdot_gschichtler' ], + install_requires = [ 'requests>=2.24.0' ], + python_requires = '>=3.5' +) diff --git a/nix/python-flipdot-gschichtler.nix b/nix/python-flipdot-gschichtler.nix new file mode 100644 index 0000000..a85598d --- /dev/null +++ b/nix/python-flipdot-gschichtler.nix @@ -0,0 +1,24 @@ +{ buildPythonPackage, requests +, rootSrc +}: + +buildPythonPackage rec { + pname = "flipdot-gschichtler"; + version = import ./version.nix; + + src = rootSrc + "/clients/py"; + + doCheck = false; + + postPatch = '' + sed -i "s/version = '.*'/version = '${version}'/" setup.py + ''; + + propagatedBuildInputs = [ requests ]; + + pythonImportsCheck = [ "flipdot_gschichtler" ]; + + meta = { + description = "Python client for the flipdot-gschichtler API"; + }; +} |