1
1
from functools import partial
2
2
from six import add_metaclass
3
- from typing import Any , Callable , Dict , Optional , Set , Tuple , Type , TypeVar , Union # noqa
3
+ from typing import Any , Callable , Type
4
4
5
- from mypy_extensions import Arg , DefaultArg , KwArg
6
5
import requests
7
6
from requests .exceptions import Timeout
8
7
9
8
from popget .conf import settings
10
9
from popget .endpoint import APIEndpoint , BodyType , BODY_CONTENT_TYPES , NO_DEFAULT
11
10
from popget .errors import MissingRequiredArg
12
- from popget .extratypes import ResponseTypes # noqa
11
+ from popget .extratypes import ResponseTypes
13
12
from popget .utils import get_base_attr , update_nested
14
13
15
14
16
- ClientMethod = Callable [
17
- [
18
- Arg (Type ['APIClient' ], 'cls' ),
19
- DefaultArg (Optional [Dict [Any , Any ]], '_request_kwargs' ),
20
- DefaultArg (Optional [requests .Session ], '_session' ),
21
- KwArg (object ),
22
- ],
23
- Union [ResponseTypes , object ]
24
- ]
25
-
26
-
27
- def method_factory (endpoint , client_method_name ):
28
- # type: (APIEndpoint, str) -> ClientMethod
15
+ def method_factory (endpoint : APIEndpoint , client_method_name : str ):
29
16
"""
30
17
Kwargs:
31
18
endpoint: the endpoint to generate a callable method for
@@ -36,8 +23,9 @@ def method_factory(endpoint, client_method_name):
36
23
In turn the method returns response content, either string or
37
24
deserialized JSON data.
38
25
"""
39
- def _prepare_request (base_url , _request_kwargs = None , ** call_kwargs ):
40
- # type: (str, Optional[Dict], **Any) -> Tuple[str, Dict[str, Dict]]
26
+ def _prepare_request (
27
+ base_url : str , _request_kwargs : dict | None = None , ** call_kwargs
28
+ ) -> tuple [str , dict [str , dict ]]:
41
29
"""
42
30
Kwargs:
43
31
base_url: base url of API
@@ -100,12 +88,12 @@ def _prepare_request(base_url, _request_kwargs=None, **call_kwargs):
100
88
101
89
return url , request_kwargs
102
90
103
- def client_method (cls , # type: Type[APIClient]
104
- _request_kwargs = None , # type: Optional[Dict]
105
- _session = None , # type: requests.Session
106
- ** call_kwargs
107
- ):
108
- # type: (... ) -> Union[ ResponseTypes, object]
91
+ def client_method (
92
+ cls ,
93
+ _request_kwargs : dict | None = None ,
94
+ _session : requests . Session | None = None ,
95
+ ** call_kwargs
96
+ ) -> ResponseTypes | object :
109
97
"""
110
98
Returns:
111
99
Response... for non-async clients this will be response content,
@@ -126,17 +114,16 @@ def client_method(cls, # type: Type[APIClient]
126
114
127
115
class ConfigClass (object ):
128
116
129
- base_url = None # type : str
130
- session_cls = None # type : Type[requests.Session]
131
- _session = None # type : requests.Session
117
+ base_url : str
118
+ session_cls : Type [requests .Session ]
119
+ _session : requests .Session | None = None
132
120
133
121
def __init__ (self , config ):
134
122
self .base_url = getattr (config , 'base_url' , '' )
135
123
self .session_cls = getattr (config , 'session_cls' , requests .Session )
136
124
137
125
@property
138
- def session (self ):
139
- # type: () -> requests.Session
126
+ def session (self ) -> requests .Session :
140
127
if not self ._session :
141
128
session = self .session_cls ()
142
129
session .headers ['User-Agent' ] = settings .CLIENT_DEFAULT_USER_AGENT
@@ -179,8 +166,9 @@ class Config:
179
166
config_class = ConfigClass
180
167
181
168
@staticmethod
182
- def add_methods_for_endpoint (methods , name , endpoint , config ):
183
- # type: (Dict[str, classmethod], str, APIEndpoint, Any) -> None
169
+ def add_methods_for_endpoint (
170
+ methods : dict [str , classmethod ], name : str , endpoint : APIEndpoint , config : Any
171
+ ) -> None :
184
172
methods [name ] = classmethod (method_factory (endpoint , '_make_request' ))
185
173
186
174
def __new__ (cls , name , bases , attrs ):
@@ -198,8 +186,7 @@ def __new__(cls, name, bases, attrs):
198
186
return type .__new__ (cls , name , bases , attrs )
199
187
200
188
201
- def get_response_body (response ):
202
- # type: (requests.Response) -> ResponseTypes
189
+ def get_response_body (response : requests .Response ) -> ResponseTypes :
203
190
"""
204
191
Kwargs:
205
192
response: from requests lib
@@ -231,12 +218,12 @@ def get_response_body(response):
231
218
@add_metaclass (APIClientMetaclass )
232
219
class APIClient (object ):
233
220
234
- _config = None # type : ConfigClass
221
+ _config : ConfigClass
235
222
236
223
@staticmethod
237
- def _request_kwargs (method , url , args , kwargs ):
238
- # type: ( str, str, Tuple [Any, ...], Dict [str, Any]) -> None
239
-
224
+ def _request_kwargs (
225
+ method : str , url : str , args : tuple [Any , ...], kwargs : dict [str , Any ]
226
+ ) -> None :
240
227
if settings .CLIENT_DISABLE_VERIFY_SSL :
241
228
kwargs ['verify' ] = False
242
229
@@ -245,9 +232,7 @@ def _request_kwargs(method, url, args, kwargs):
245
232
kwargs ['timeout' ] = settings .CLIENT_TIMEOUT
246
233
247
234
@staticmethod
248
- def handle (call , request_url ):
249
- # type: (Callable[[], requests.Response], str) -> ResponseTypes
250
-
235
+ def handle (call : Callable [[], requests .Response ], request_url : str ) -> ResponseTypes :
251
236
try :
252
237
res = call ()
253
238
except Timeout as e :
@@ -262,8 +247,9 @@ def handle(call, request_url):
262
247
return get_response_body (res )
263
248
264
249
@classmethod
265
- def _make_request (cls , method , url , session = None , * args , ** kwargs ):
266
- # type: (str, str, Optional[requests.Session], *Any, **Any) -> ResponseTypes
250
+ def _make_request (
251
+ cls , method : str , url : str , session : requests .Session | None = None , * args , ** kwargs
252
+ ) -> ResponseTypes :
267
253
"""
268
254
Don't call this directly. Instead, add APIEndpoint instances to your
269
255
APIClient sub-class definition. Accessor methods will be generated by
0 commit comments