1+ import os
2+ import requests
3+ import json
4+ from .common import API_URL
5+
6+ class _Store ():
7+ def __init__ (self ,interceptor ):
8+ self .path = '/store'
9+ self .interceptor = interceptor
10+
11+ def insert (self ,key ,value ):
12+ entry = StoreEntry (key ,value )
13+ r = requests .post (API_URL + self .path ,auth = self .interceptor ,data = entry .to_json ())
14+ data = r .json ()
15+ if not 200 <= r .status_code < 300 :
16+ raise StoreError (data ['code' ],data ['message' ])
17+ return StoreEntry .from_json (data )
18+
19+ def get (self ,key ):
20+ r = requests .get (API_URL + self .path + '/' + key ,auth = self .interceptor )
21+ data = r .json ()
22+ if not 200 <= r .status_code < 300 :
23+ raise StoreError (data ['code' ],data ['message' ])
24+ return StoreEntry .from_json (data )
25+
26+ def query (self ,filters = '' ,limit = None ,offset = None ):
27+ params = {
28+ 'filters' :filters ,
29+ 'limit' :limit ,
30+ 'offset' :offset
31+ }
32+ r = requests .get (API_URL + self .path ,auth = self .interceptor ,params = params )
33+ data = r .json ()
34+ if not 200 <= r .status_code < 300 :
35+ raise StoreError (data ['code' ],data ['message' ])
36+ return StoreQueryResponse .from_json (data )
37+
38+ def update (self ,key ,value ):
39+ entry = StoreEntry (key ,value )
40+ r = requests .put (API_URL + self .path + '/' + key ,auth = self .interceptor ,data = entry .to_json ())
41+ if not 200 <= r .status_code < 300 :
42+ raise StoreError (data ['code' ],data ['message' ])
43+
44+ def delete (self ,key ):
45+ r = requests .delete (API_URL + self .path + '/' + key ,auth = self .interceptor )
46+ if not 200 <= r .status_code < 300 :
47+ raise StoreError (data ['code' ],data ['message' ])
48+
49+ class StoreEntry ():
50+ def __init__ (self ,key = None ,value = None ):
51+ self .key = key
52+ self .value = value
53+ self .created_at = None
54+ self .updated_at = None
55+
56+ def to_json (self ):
57+ return json .dumps ({
58+ 'key' :self .key ,
59+ 'value' :self .value
60+ })
61+
62+ @classmethod
63+ def from_json (self ,entry ):
64+ se = StoreEntry (entry ['key' ],entry ['value' ])
65+ se .created_at = entry ['created_at' ]
66+ se .updated_at = entry ['updated_at' ]
67+ return se
68+
69+ class StoreQueryResponse ():
70+ def __init__ (self ):
71+ self .total = 0
72+ self .entries = []
73+
74+ @classmethod
75+ def from_json (self ,response ):
76+ qr = StoreQueryResponse ()
77+ qr .total = response ['total' ]
78+ qr .entries = response ['entries' ]
79+ return qr
80+
81+ class StoreError (Exception ):
82+ def __init__ (self ,code ,message ):
83+ self .code = code
84+ self .message = message
85+
86+ def __str__ (self ):
87+ return 'store error, code={0}, message={1}' .format (self .code ,self .message )
88+