2
2
import inspect
3
3
import json
4
4
import requests
5
+ import typing
5
6
from requests .exceptions import HTTPError
6
7
from requests .models import Response
7
8
@@ -70,7 +71,8 @@ def append_querystring(url: str, args: dict[str, Any]):
70
71
if args :
71
72
for key in args :
72
73
val = args [key ]
73
- if val is None : continue
74
+ if val is None :
75
+ continue
74
76
url += '&' if '?' in url else '?'
75
77
url += key + '=' + qsvalue (val )
76
78
return url
@@ -107,7 +109,7 @@ def _json_encoder(obj: Any):
107
109
return clean_any (asdict (obj ))
108
110
if hasattr (obj , '__dict__' ):
109
111
return vars (obj )
110
- if isinstance (obj , ( datetime . date , datetime ) ):
112
+ if isinstance (obj , datetime ):
111
113
return obj .isoformat ()
112
114
if isinstance (obj , timedelta ):
113
115
return to_timespan (obj )
@@ -128,8 +130,8 @@ class TypeConverters:
128
130
deserializers : dict [Type , Callable [[Any ], Any ]]
129
131
130
132
@staticmethod
131
- def register ( type : Type , converter : Callable [[Any ], Any ]):
132
- TypeConverters .deserializers [type ] = converter
133
+ def register_deserializer ( cls : Type , deserializer : Callable [[Any ], Any ]):
134
+ TypeConverters .deserializers [cls ] = deserializer
133
135
134
136
135
137
TypeConverters .deserializers = {
@@ -160,9 +162,9 @@ def generic_args(cls: Type):
160
162
161
163
def _resolve_forwardref (cls : Type , orig : Type = None ):
162
164
type_name = cls .__forward_arg__
163
- if not orig is None and orig .__name__ == type_name :
165
+ if orig is not None and orig .__name__ == type_name :
164
166
return orig
165
- if not type_name in globals ():
167
+ if type_name not in globals ():
166
168
raise TypeError (f"Could not resolve ForwardRef('{ type_name } ')" )
167
169
return globals ()[type_name ]
168
170
@@ -176,7 +178,8 @@ def unwrap(cls: Type):
176
178
177
179
178
180
def dict_get (name : str , obj : dict , case : Callable [[str ], str ] = None ):
179
- if name in obj : return obj [name ]
181
+ if name in obj :
182
+ return obj [name ]
180
183
if case :
181
184
name_case = case (name )
182
185
if name_case in obj :
@@ -192,16 +195,19 @@ def dict_get(name: str, obj: dict, case: Callable[[str], str] = None):
192
195
return None
193
196
194
197
195
- def _resolve_type (cls : Type , substitute_types : Dict [str , type ]):
196
- if substitute_types is None : return cls
198
+ def _resolve_type (cls : Type , substitute_types : Dict [Type , type ]):
199
+ if substitute_types is None :
200
+ return cls
197
201
return substitute_types [cls ] if cls in substitute_types else cls
198
202
199
203
200
- def convert (into : Type , obj : Any , substitute_types : Dict [str , type ] = None ):
201
- if obj is None : return None
204
+ def convert (into : Type , obj : Any , substitute_types : Dict [Type , type ] = None ):
205
+ if obj is None :
206
+ return None
202
207
into = unwrap (into )
203
208
into = _resolve_type (into , substitute_types )
204
- if Log .debug_enabled (): Log .debug (f"convert({ into } , { obj } )" )
209
+ if Log .debug_enabled ():
210
+ Log .debug (f"convert({ into } , { obj } )" )
205
211
206
212
generic_def = get_origin (into )
207
213
if generic_def is not None and is_dataclass (generic_def ):
@@ -260,7 +266,8 @@ def convert(into: Type, obj: Any, substitute_types: Dict[str, type] = None):
260
266
261
267
262
268
def from_json (into : Type , json_str : str ):
263
- if json_str is None or json_str == "" : return None
269
+ if json_str is None or json_str == "" :
270
+ return None
264
271
json_obj = json .loads (json_str )
265
272
return convert (into , json_obj )
266
273
@@ -332,25 +339,25 @@ def create_url_from_dto(self, method: str, request: Any):
332
339
url = append_querystring (url , request .__dict__ )
333
340
return url
334
341
335
- def get (self , request , args = None ):
342
+ def get (self , request : IReturn [ T ] , args = None ) -> T :
336
343
return self .send (request , "GET" , None , args )
337
344
338
- def post (self , request , body = None , args = None ):
345
+ def post (self , request : IReturn [ T ] , body = None , args = None ) -> T :
339
346
return self .send (request , "POST" , body , args )
340
347
341
- def put (self , request , body = None , args = None ):
348
+ def put (self , request : IReturn [ T ] , body = None , args = None ) -> T :
342
349
return self .send (request , "PUT" , body , args )
343
350
344
- def patch (self , request , body = None , args = None ):
351
+ def patch (self , request : IReturn [ T ] , body = None , args = None ) -> T :
345
352
return self .send (request , "PATCH" , body , args )
346
353
347
- def delete (self , request , args = None ):
354
+ def delete (self , request : IReturn [ T ] , args = None ) -> T :
348
355
return self .send (request , "DELETE" , None , args )
349
356
350
- def options (self , request , args = None ):
357
+ def options (self , request : IReturn [ T ] , args = None ) -> T :
351
358
return self .send (request , "OPTIONS" , None , args )
352
359
353
- def head (self , request , args = None ):
360
+ def head (self , request : IReturn [ T ] , args = None ) -> T :
354
361
return self .send (request , "HEAD" , None , args )
355
362
356
363
def to_absolute_url (self , path_or_url : str ):
@@ -418,7 +425,8 @@ def assert_valid_batch_request(self, requests: list):
418
425
if not isinstance (requests , list ):
419
426
raise TypeError (f"'{ nameof (requests )} ' is not a List" )
420
427
421
- if len (requests ) == 0 : return []
428
+ if len (requests ) == 0 :
429
+ return []
422
430
423
431
request = requests [0 ]
424
432
if not isinstance (request , IReturn ) and not isinstance (request , IReturnVoid ):
@@ -482,7 +490,8 @@ def _create_response(self, response: Response, info: SendContext):
482
490
return response .content
483
491
484
492
json_str = response .text
485
- if Log .debug_enabled : Log .debug (f"json_str: { json_str } " )
493
+ if Log .debug_enabled :
494
+ Log .debug (f"json_str: { json_str } " )
486
495
487
496
if into is None :
488
497
return json .loads (json_str )
0 commit comments