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" def __init__(self, api_key=None, endpoint=None): self.endpoint = endpoint if self.endpoint is None: self.endpoint = self.DEFAULT_ENDPOINT self.hdrs = { # FIXME: Find way to automatically get version "User-Agent": "Vultron", "Authorization": f"Bearer {api_key}" } def get(self, *resources): url = f"{self.endpoint}/{'/'.join(resources)}" res = requests.get(url, headers=self.hdrs) 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: raise BadReq(res.status_code)