diff --git a/nullptr/api.py b/nullptr/api.py index 238f53b..88c09df 100644 --- a/nullptr/api.py +++ b/nullptr/api.py @@ -4,12 +4,15 @@ from nullptr.models.waypoint import Waypoint from nullptr.models.marketplace import Marketplace from nullptr.models.jumpgate import Jumpgate from .util import * - +from time import sleep class ApiError(Exception): def __init__(self, msg, code): super().__init__(msg) self.code = code - + +class ApiLimitError(Exception): + pass + class Api: def __init__(self, store, agent): self.agent = agent @@ -21,15 +24,24 @@ class Api: if self.agent.token is None: raise ApiError('no token. Please register', 1337) return self.agent.token - + def request(self, method, path, data=None, need_token=True, params={}): + try: + return self.request_once(method, path, data, need_token, params) + except ApiLimitError: + print('oops, hit the limit. take a break') + sleep(10) + return self.request_once(method, path, data, need_token, params) + + def request_once(self, method, path, data=None, need_token=True, params={}): headers = {} if need_token: headers['Authorization'] = 'Bearer ' + self.token() if method == 'get': params['limit'] = 20 r = requests.request(method, self.root+path, json=data, headers=headers, params=params) - + if r.status_code == 429: + raise ApiLimitError() result = r.json() self.last_result = result if result is None: