11import json
22import logging
3- from copy import deepcopy
4- from sseclient import SSEClient
53from collections .abc import Hashable , Iterable
4+ from copy import deepcopy
65from urllib .parse import quote as urlquote
76
7+ from sseclient import SSEClient
8+
89
910class DB ():
1011 def __init__ (self , client , params , ** kwargs ):
@@ -56,32 +57,37 @@ def dbname(self):
5657 def dbtype (self ):
5758 return self .__type
5859
60+ @property
61+ def capabilities (self ):
62+ return deepcopy (self .__params .get ('capabilities' , []))
63+
5964 @property
6065 def queryable (self ):
61- return 'query' in self .__params .get ('capabilities' , {})
66+ return 'query' in self .__params .get ('capabilities' , [])
67+
6268 @property
6369 def putable (self ):
64- return 'put' in self .__params .get ('capabilities' , {} )
70+ return 'put' in self .__params .get ('capabilities' , [] )
6571
6672 @property
6773 def removeable (self ):
68- return 'remove' in self .__params .get ('capabilities' , {} )
74+ return 'remove' in self .__params .get ('capabilities' , [] )
6975
7076 @property
7177 def iterable (self ):
72- return 'iterator' in self .__params .get ('capabilities' , {} )
78+ return 'iterator' in self .__params .get ('capabilities' , [] )
7379
7480 @property
7581 def addable (self ):
76- return 'add' in self .__params .get ('capabilities' , {} )
82+ return 'add' in self .__params .get ('capabilities' , [] )
7783
7884 @property
7985 def valuable (self ):
80- return 'value' in self .__params .get ('capabilities' , {} )
86+ return 'value' in self .__params .get ('capabilities' , [] )
8187
8288 @property
8389 def incrementable (self ):
84- return 'inc' in self .__params .get ('capabilities' , {} )
90+ return 'inc' in self .__params .get ('capabilities' , [] )
8591
8692 @property
8793 def indexed (self ):
@@ -97,7 +103,7 @@ def write_access(self):
97103
98104 def info (self ):
99105 endpoint = '/' .join (['db' , self .__id_safe ])
100- return self .__client ._call ('get ' , endpoint )
106+ return self .__client ._call ('GET ' , endpoint )
101107
102108 def get (self , item , cache = None , unpack = False ):
103109 if cache is None : cache = self .__use_cache
@@ -106,7 +112,7 @@ def get(self, item, cache=None, unpack=False):
106112 result = self .__cache [item ]
107113 else :
108114 endpoint = '/' .join (['db' , self .__id_safe , item ])
109- result = self .__client ._call ('get ' , endpoint )
115+ result = self .__client ._call ('GET ' , endpoint )
110116 if cache : self .__cache [item ] = result
111117 if isinstance (result , Hashable ): return deepcopy (result )
112118 if isinstance (result , Iterable ): return deepcopy (result )
@@ -117,11 +123,11 @@ def get(self, item, cache=None, unpack=False):
117123
118124 def get_raw (self , item ):
119125 endpoint = '/' .join (['db' , self .__id_safe , 'raw' , str (item )])
120- return (self .__client ._call ('get ' , endpoint ))
126+ return (self .__client ._call ('GET ' , endpoint ))
121127
122128 def put (self , item , cache = None ):
123129 if self .__enforce_caps and not self .putable :
124- raise CapabilityError ('Db {} does not have put capability' . format ( self . __dbname ) )
130+ raise CapabilityError (f 'Db { self . __dbname } does not have put capability' )
125131 if self .indexed and (not hasattr (item , self .__index_by )) and self .__enforce_indexby :
126132 raise MissingIndexError ("The provided document doesn't contain field '{}'" .format (self .__index_by ))
127133
@@ -134,59 +140,60 @@ def put(self, item, cache=None):
134140 if index_val :
135141 self .__cache [index_val ] = item
136142 endpoint = '/' .join (['db' , self .__id_safe , 'put' ])
137- entry_hash = self .__client ._call ('post ' , endpoint , item ).get ('hash' )
143+ entry_hash = self .__client ._call ('POST ' , endpoint , item ).get ('hash' )
138144 if cache and entry_hash : self .__cache [entry_hash ] = item
139145 return entry_hash
140146
141147 def add (self , item , cache = None ):
142148 if self .__enforce_caps and not self .addable :
143- raise CapabilityError ('Db {} does not have add capability' . format ( self . __dbname ) )
149+ raise CapabilityError (f 'Db { self . __dbname } does not have add capability' )
144150 if cache is None : cache = self .__use_cache
145151 endpoint = '/' .join (['db' , self .__id_safe , 'add' ])
146- entry_hash = self .__client ._call ('post ' , endpoint , item ).get ('hash' )
152+ entry_hash = self .__client ._call ('POST ' , endpoint , item ).get ('hash' )
147153 if cache and entry_hash : self .__cache [entry_hash ] = item
148154 return entry_hash
149155
150156 def iterator_raw (self , ** kwargs ):
151157 if self .__enforce_caps and not self .iterable :
152- raise CapabilityError ('Db {} does not have iterator capability' . format ( self . __dbname ) )
158+ raise CapabilityError (f 'Db { self . __dbname } does not have iterator capability' )
153159 endpoint = '/' .join (['db' , self .__id_safe , 'rawiterator' ])
154- return self .__client ._call ('get ' , endpoint , kwargs )
160+ return self .__client ._call ('GET ' , endpoint , json = kwargs )
155161
156162 def iterator (self , ** kwargs ):
157163 if self .__enforce_caps and not self .iterable :
158- raise CapabilityError ('Db {} does not have iterator capability' . format ( self . __dbname ) )
164+ raise CapabilityError (f 'Db { self . __dbname } does not have iterator capability' )
159165 endpoint = '/' .join (['db' , self .__id_safe , 'iterator' ])
160- return self .__client ._call ('get ' , endpoint , kwargs )
166+ return self .__client ._call ('GET ' , endpoint , json = kwargs )
161167
162168 def index (self ):
163169 endpoint = '/' .join (['db' , self .__id_safe , 'index' ])
164- result = self .__client ._call ('get ' , endpoint )
170+ result = self .__client ._call ('GET ' , endpoint )
165171 return result
166172
167173 def all (self ):
168174 endpoint = '/' .join (['db' , self .__id_safe , 'all' ])
169- result = self .__client ._call ('get ' , endpoint )
175+ result = self .__client ._call ('GET ' , endpoint )
170176 if isinstance (result , Hashable ):
171177 self .__cache = result
172178 return result
173179
174180 def remove (self , item ):
175181 if self .__enforce_caps and not self .removeable :
176- raise CapabilityError ('Db {} does not have remove capability' . format ( self . __dbname ) )
182+ raise CapabilityError (f 'Db { self . __dbname } does not have remove capability' )
177183 item = str (item )
178184 endpoint = '/' .join (['db' , self .__id_safe , item ])
179- return self .__client ._call ('delete ' , endpoint )
185+ return self .__client ._call ('DELETE ' , endpoint )
180186
181187 def unload (self ):
182188 endpoint = '/' .join (['db' , self .__id_safe ])
183- return self .__client ._call ('delete ' , endpoint )
189+ return self .__client ._call ('DELETE ' , endpoint )
184190
185191 def events (self , eventname ):
186192 endpoint = '/' .join (['db' , self .__id_safe , 'events' , urlquote (eventname , safe = '' )])
187193 #return SSEClient('{}/{}'.format(self.__client.base_url, endpoint), session=self.__client.session)
188- req = self .__client ._call_raw ('get' , endpoint , stream = True )
189- return SSEClient (req ).events ()
194+ res = self .__client ._call_raw ('GET' , endpoint , stream = True )
195+ res .raise_for_status ()
196+ return SSEClient (res .stream ()).events ()
190197
191198class CapabilityError (Exception ):
192199 pass
0 commit comments