57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
|
import requests
|
||
|
from util import *
|
||
|
|
||
|
class ApiError(Exception):
|
||
|
def __init__(self, msg, code):
|
||
|
super().__init__(msg)
|
||
|
self.code = code
|
||
|
|
||
|
class Api:
|
||
|
def __init__(self, store, agent):
|
||
|
self.agent = agent
|
||
|
self.store = store
|
||
|
self.root = 'https://api.spacetraders.io/v2/'
|
||
|
|
||
|
def token(self):
|
||
|
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):
|
||
|
headers = {}
|
||
|
params = {}
|
||
|
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)
|
||
|
|
||
|
result = r.json()
|
||
|
self.last_result = result
|
||
|
if result is None:
|
||
|
raise ApiError('http call failed', r.status_code)
|
||
|
elif 'data' not in result:
|
||
|
error_code = sg(result, 'error.code', -1)
|
||
|
self.last_error = error_code
|
||
|
error_message = sg(result, 'error.message')
|
||
|
raise ApiError(error_message, error_code)
|
||
|
else:
|
||
|
self.last_error = 0
|
||
|
return result['data']
|
||
|
|
||
|
def register(self, faction):
|
||
|
callsign = self.agent.symbol
|
||
|
data = {
|
||
|
'symbol': callsign,
|
||
|
'faction': faction
|
||
|
}
|
||
|
result = self.request('post', 'register', data, need_token=False)
|
||
|
token = mg(result, 'token')
|
||
|
self.agent.token = token
|
||
|
|
||
|
def info(self):
|
||
|
data = self.request('get', 'my/agent')
|
||
|
self.agent.update(data)
|
||
|
return self.agent
|
||
|
|