X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=python%2Fhetzner_helper.py;fp=python%2Fhetzner_helper.py;h=496e14d09fa03105ed2879bc67667994e8fd40a6;hb=367c391a61091817cf34475f91a23ca286eec334;hp=0000000000000000000000000000000000000000;hpb=64d41da73cce0005757ca0f7dd88151f9ba5cf4a;p=perso%2FImmae%2FProjets%2FPuppet.git diff --git a/python/hetzner_helper.py b/python/hetzner_helper.py new file mode 100644 index 0000000..496e14d --- /dev/null +++ b/python/hetzner_helper.py @@ -0,0 +1,59 @@ +import json +import requests +import os + +from configparser import RawConfigParser, NoSectionError, NoOptionError + +class AuthenticationException(Exception): + pass + +class RateLimitExceeded(Exception): + pass + +class InternalServer(Exception): + pass + +class HetznerConfig: + def __init__(self): + config = RawConfigParser() + config.read([os.path.expanduser('~/.hetzner.conf')]) + + self.api_key = config.get("default", "api_key") + +config = HetznerConfig() + +def call(endpoint, url_params=None, body=None, method="GET"): + api = "https://api.hetzner.cloud/v1/{}".format(endpoint) + headers = {"Authorization": "Bearer {}".format(config.api_key)} + data = json.dumps(body) if body is not None else None + + if method == "GET": + request = requests.get(api, headers=headers, params=url_params) + elif method == "POST" or (method == "GET" and body is not None): + request = requests.post(api, data=data, headers=headers, params=url_params) + elif method == "DELETE": + request = requests.delete(api, headers=headers) + elif method == "PUT": + request = requests.put(api, headers=headers, data=data) + + if request.status_code == 401 or request.status_code == 403: + raise AuthenticationException() + + if request.status_code == 429: + raise RateLimitExceeded() + + if request.status_code == 500: + raise InternalServer(request.text) + + if not request.text: + return request.status_code, "" + + js = request.json() + + return request.status_code, js + +def get(*args, **kwargs): + return call(*args, method="GET", **kwargs) + +def post(*args, **kwargs): + return call(*args, method="POST", **kwargs)