11import os
22import datetime
3- from re import I
4- import typing
3+ from typing import Union , List
54from urllib .parse import quote
65
76from .service import _Service , JSON_MIME
@@ -62,18 +61,18 @@ def __init__(self, value):
6261 def trim (self ):
6362 return self .Trim ()
6463
65- def increment (self , value : typing . Union [int , float ] = None ):
64+ def increment (self , value : Union [int , float , None ] = None ):
6665 return self .Increment (value )
6766
68- def append (self , value : typing . Union [dict , list , str , int , float , bool ]):
67+ def append (self , value : Union [dict , list , str , int , float , bool ]):
6968 return self .Append (value )
7069
71- def prepend (self , value : typing . Union [dict , list , str , int , float , bool ]):
70+ def prepend (self , value : Union [dict , list , str , int , float , bool ]):
7271 return self .Prepend (value )
7372
7473
7574class _Base (_Service ):
76- def __init__ (self , name : str , project_key : str , project_id : str , host : str = None ):
75+ def __init__ (self , name : str , project_key : str , project_id : str , host : Union [ str , None ] = None ):
7776 assert name , "No Base name provided"
7877
7978 host = host or os .getenv ("DETA_BASE_HOST" ) or "database.deta.sh"
@@ -110,11 +109,11 @@ def delete(self, key: str):
110109
111110 def insert (
112111 self ,
113- data : typing . Union [dict , list , str , int , bool ],
114- key : str = None ,
112+ data : Union [dict , list , str , int , bool ],
113+ key : Union [ str , None ] = None ,
115114 * ,
116- expire_in : int = None ,
117- expire_at : typing . Union [int , float , datetime .datetime ] = None ,
115+ expire_in : Union [ int , None ] = None ,
116+ expire_at : Union [int , float , datetime .datetime , None ] = None ,
118117 ):
119118 if not isinstance (data , dict ):
120119 data = {"value" : data }
@@ -124,7 +123,8 @@ def insert(
124123 if key :
125124 data ["key" ] = key
126125
127- insert_ttl (data , self .__ttl_attribute , expire_in = expire_in , expire_at = expire_at )
126+ insert_ttl (data , self .__ttl_attribute ,
127+ expire_in = expire_in , expire_at = expire_at )
128128 code , res = self ._request (
129129 "/items" , "POST" , {"item" : data }, content_type = JSON_MIME
130130 )
@@ -135,11 +135,11 @@ def insert(
135135
136136 def put (
137137 self ,
138- data : typing . Union [dict , list , str , int , bool ],
139- key : str = None ,
138+ data : Union [dict , list , str , int , bool ],
139+ key : Union [ str , None ] = None ,
140140 * ,
141- expire_in : int = None ,
142- expire_at : typing . Union [int , float , datetime .datetime ] = None ,
141+ expire_in : Union [ int , None ] = None ,
142+ expire_at : Union [int , float , datetime .datetime , None ] = None ,
143143 ):
144144 """store (put) an item in the database. Overrides an item if key already exists.
145145 `key` could be provided as function argument or a field in the data dict.
@@ -154,22 +154,24 @@ def put(
154154 if key :
155155 data ["key" ] = key
156156
157- insert_ttl (data , self .__ttl_attribute , expire_in = expire_in , expire_at = expire_at )
157+ insert_ttl (data , self .__ttl_attribute ,
158+ expire_in = expire_in , expire_at = expire_at )
158159 code , res = self ._request (
159160 "/items" , "PUT" , {"items" : [data ]}, content_type = JSON_MIME
160161 )
161162
163+
162164 if code == 207 and "processed" in res :
163165 return res ["processed" ]["items" ][0 ]
164166 else :
165167 return None
166168
167169 def put_many (
168170 self ,
169- items : typing . List [typing . Union [dict , list , str , int , bool ]],
171+ items : List [Union [dict , list , str , int , bool ]],
170172 * ,
171- expire_in : int = None ,
172- expire_at : typing . Union [int , float , datetime .datetime ] = None ,
173+ expire_in : Union [ int , None ] = None ,
174+ expire_at : Union [int , float , datetime .datetime , None ] = None ,
173175 ):
174176 assert len (items ) <= 25 , "We can't put more than 25 items at a time."
175177 _items = []
@@ -189,9 +191,9 @@ def put_many(
189191
190192 def _fetch (
191193 self ,
192- query : typing . Union [dict , list ] = None ,
193- buffer : int = None ,
194- last : str = None ,
194+ query : Union [dict , list , None ] = None ,
195+ buffer : Union [ int , None ] = None ,
196+ last : Union [ str , None ] = None ,
195197 desc : bool = False ,
196198 ) -> typing .Optional [typing .Tuple [int , list ]]:
197199 """This is where actual fetch happens."""
@@ -204,34 +206,43 @@ def _fetch(
204206 if query :
205207 payload ["query" ] = query if isinstance (query , list ) else [query ]
206208
207- code , res = self ._request ("/query" , "POST" , payload , content_type = JSON_MIME )
208- return code , res
209+ _ , res = self ._request (
210+ "/query" , "POST" , payload , content_type = JSON_MIME )
211+
212+ assert res
213+
214+ return res
209215
210216 def fetch (
211217 self ,
212- query : typing . Union [dict , list ] = None ,
218+ query : Union [dict , list , None ] = None ,
213219 * ,
214220 limit : int = 1000 ,
215- last : str = None ,
221+ last : Union [ str , None ] = None ,
216222 desc : bool = False ,
223+
217224 ):
218225 """
219226 fetch items from the database.
220227 `query` is an optional filter or list of filters. Without filter, it will return the whole db.
221228 """
229+
222230 _ , res = self ._fetch (query , limit , last , desc )
223231
224- paging = res .get ("paging" )
225232
226- return FetchResponse (paging .get ("size" ), paging .get ("last" ), res .get ("items" ))
233+ paging = res .get ("paging" ) # pyright: ignore
234+
235+ return FetchResponse (paging .get ("size" ),
236+ paging .get ("last" ),
237+ res .get ("items" )) # pyright: ignore
227238
228239 def update (
229240 self ,
230241 updates : dict ,
231242 key : str ,
232243 * ,
233- expire_in : int = None ,
234- expire_at : typing . Union [int , float , datetime .datetime ] = None ,
244+ expire_in : Union [ int , None ] = None ,
245+ expire_at : Union [int , float , datetime .datetime , None ] = None ,
235246 ):
236247 """
237248 update an item in the database
0 commit comments