diff --git a/vultron/api.py b/vultron/api.py index 2e0867f..a4eb58a 100644 --- a/vultron/api.py +++ b/vultron/api.py @@ -1,4 +1,21 @@ import requests +import vultron.err + +class BadCreds(vultron.err.Error): + def __str__(self): + return f"api key supplied is not valid" + +class BadReq(vultron.err.Error): + def __str__(self): + return f"received unexpected error code: {self.args[0]}" + +class RateLimit(vultron.err.Error): + def __str__(self): + return f"you are currently being rate limited by Vultr" + +class VultrIssue(vultron.err.Error): + def __str__(self): + return f"request could not be processed by Vultr" class Client: DEFAULT_ENDPOINT = "https://api.vultr.com/v2" @@ -10,6 +27,7 @@ class Client: self.endpoint = self.DEFAULT_ENDPOINT self.hdrs = { + # FIXME: Find way to automatically get version "User-Agent": "Vultron", "Authorization": f"Bearer {api_key}" } @@ -18,8 +36,15 @@ class Client: url = f"{self.endpoint}/{'/'.join(resources)}" res = requests.get(url, headers=self.hdrs) - if res.status_code == 200: + if res.status_code in (200, 202): return res.json() + elif res.status_code == 204: + return None + elif res.status_code == 401: + raise BadCreds() + elif res.status_code == 429: + raise RateLimit() + elif res.status_code == 500: + raise VultrIssue() else: - pass - # FIXME: raise error w/ status code here + raise BadReq(res.status_code)