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
+
0 commit comments