5 from configparser
import RawConfigParser
, NoSectionError
, NoOptionError
7 class AuthenticationException(Exception):
10 class RateLimitExceeded(Exception):
13 class InternalServer(Exception):
18 config
= RawConfigParser()
19 config
.read([os
.path
.expanduser('~/.hetzner.conf')])
21 self
.api_key
= config
.get("default", "api_key")
23 config
= HetznerConfig()
25 def call(endpoint
, url_params
=None, body
=None, method
="GET"):
26 api
= "https://api.hetzner.cloud/v1/{}".format(endpoint
)
27 headers
= {"Authorization": "Bearer {}
".format(config.api_key)}
28 data = json.dumps(body) if body is not None else None
31 request = requests.get(api, headers=headers, params=url_params)
32 elif method == "POST
" or (method == "GET
" and body is not None):
33 request = requests.post(api, data=data, headers=headers, params=url_params)
34 elif method == "DELETE
":
35 request = requests.delete(api, headers=headers)
37 request = requests.put(api, headers=headers, data=data)
39 if request.status_code == 401 or request.status_code == 403:
40 raise AuthenticationException()
42 if request.status_code == 429:
43 raise RateLimitExceeded()
45 if request.status_code == 500:
46 raise InternalServer(request.text)
49 return request.status_code, ""
53 return request.status_code, js
55 def get(*args, **kwargs):
56 return call(*args, method="GET
", **kwargs)
58 def post(*args, **kwargs):
59 return call(*args, method="POST
", **kwargs)