-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathrest_api.py
68 lines (50 loc) · 1.63 KB
/
rest_api.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import requests
import minds.exceptions as exc
def _raise_for_status(response):
if response.status_code == 404:
raise exc.ObjectNotFound(response.text)
if response.status_code == 403:
raise exc.Forbidden(response.text)
if response.status_code == 401:
raise exc.Unauthorized(response.text)
if 400 <= response.status_code < 600:
raise exc.UnknownError(f'{response.reason}: {response.text}')
class RestAPI:
def __init__(self, api_key, base_url=None):
if base_url is None:
base_url = 'https://mdb.ai'
base_url = base_url.rstrip('/')
if not base_url.endswith('/api'):
base_url = base_url + '/api'
self.api_key = api_key
self.base_url = base_url
def _headers(self):
return {'Authorization': 'Bearer ' + self.api_key}
def get(self, url):
resp = requests.get(self.base_url + url, headers=self._headers())
_raise_for_status(resp)
return resp
def delete(self, url, data=None):
resp = requests.delete(
self.base_url + url,
headers=self._headers(),
json=data
)
_raise_for_status(resp)
return resp
def post(self, url, data):
resp = requests.post(
self.base_url + url,
headers=self._headers(),
json=data,
)
_raise_for_status(resp)
return resp
def patch(self, url, data):
resp = requests.patch(
self.base_url + url,
headers=self._headers(),
json=data,
)
_raise_for_status(resp)
return resp