· 7 years ago · Sep 01, 2018, 11:36 PM
1import requests
2
3class JSONBinException(Exception):
4 pass
5
6
7class JSONBin:
8 def __init__(self, secret_key=None, versioning=True, bins=tuple()):
9 self.url = 'https://api.jsonbin.io/b'
10 self.secret_key = {'secret-key': secret_key}
11 self.bins = bins
12 self.content_type = {'Content-Type': 'application/json'}
13 self.versioning = versioning
14
15 def create(self, data, collection_id=None, private=False):
16 headers = self.content_type
17 if self.secret_key:
18 headers.update(self.secret_key)
19 if collection_id:
20 headers.update({'collection-id': collection_id})
21 if private:
22 headers.update(dict(private='true'))
23
24 req = requests.post(self.url, json=data, headers=headers)
25
26 # if not req.json()['success']:
27 # raise JSONBinException(req.json()['message'])
28
29 return req.json()
30
31 def read(self, bin_id, bin_version='latest'):
32 url = self.url + '/{}/{}'.format(bin_id, bin_version)
33 headers = self.content_type
34 if self.secret_key:
35 headers.update(self.secret_key)
36
37 req = requests.get(url, headers=headers)
38
39 try:
40 req_json = req.json()
41 except Exception as err:
42 raise JSONBinException(req.text, err)
43 if isinstance(req_json, dict):
44 if req_json.get('success') is not None:
45 if not req_json.get('sucess'):
46 raise JSONBinException(req_json)
47
48 try:
49 return req.json()
50 except Exception as err:
51 raise JSONBinException(req.text, err)
52
53 def update(self, data, bin_id, versioning='self', like_dict=False):
54 url = self.url + '/{}'.format(bin_id)
55 headers = self.content_type
56 if versioning == 'self':
57 versioning = self.versioning
58
59 if like_dict:
60 data.update(self.read(bin_id))
61 if self.secret_key:
62 headers.update(self.secret_key)
63 if versioning:
64 headers.update(dict(versioning='true'))
65 else:
66 headers.update(dict(versioning='false'))
67
68 req = requests.put(url, json=data, headers=headers)
69
70 if not req.json()['success']:
71 raise JSONBinException(req.json()['message'])
72
73 return req.json()
74
75 def delete(self, bin_id):
76 url = self.url + '/{}'.format(bin_id)
77 headers = self.secret_key
78
79 req = requests.delete(url, headers=headers)
80
81 if not req.json()['success']:
82 raise JSONBinException(req.json())
83
84 return req.json()
85
86
87if __name__ == '__main__':
88 print('Nope')