1
1
"""Encapsulate common rest operations between business services propagating trace headers if configured.
2
2
"""
3
3
import logging
4
+ from typing import Any
4
5
5
6
import requests
6
7
from flask import request
7
- from requests .adapters import HTTPAdapter
8
+ from requests .adapters import HTTPAdapter , Response
8
9
from urllib3 .util .retry import Retry
9
10
10
11
from pyms .constants import LOGGER_NAME
18
19
DEFAULT_STATUS_RETRIES = (500 , 502 , 504 )
19
20
20
21
21
- def retry (f ):
22
- def wrapper (* args , ** kwargs ):
22
+ def retry (f ) -> Any :
23
+ def wrapper (* args , ** kwargs ) -> Any :
23
24
response = False
24
25
i = 0
25
26
response_ok = False
@@ -53,7 +54,7 @@ class Service(DriverService):
53
54
}
54
55
tracer = None
55
56
56
- def requests (self , session : requests .Session ):
57
+ def requests (self , session : requests .Session ) -> requests . Session :
57
58
"""
58
59
A backoff factor to apply between attempts after the second try (most errors are resolved immediately by a
59
60
second try without a delay). urllib3 will sleep for: {backoff factor} * (2 ^ ({number of total retries} - 1))
@@ -113,7 +114,7 @@ def _get_headers(self, headers: dict, propagate_headers: bool = False) -> dict:
113
114
return headers
114
115
115
116
@staticmethod
116
- def _build_url (url , path_params = None ):
117
+ def _build_url (url , path_params : dict = None ) -> str :
117
118
"""Compose full url replacing placeholders with path_params values.
118
119
119
120
:param url: base url
@@ -124,7 +125,7 @@ def _build_url(url, path_params=None):
124
125
125
126
return url .format_map (path_params )
126
127
127
- def parse_response (self , response ) :
128
+ def parse_response (self , response : Response ) -> dict :
128
129
"""Parses response's json object. Checks configuration in order to parse a concrete node or the whole response.
129
130
130
131
:param response: request's response that contains a valid json
@@ -142,7 +143,8 @@ def parse_response(self, response):
142
143
return {}
143
144
144
145
@retry
145
- def get (self , url , path_params = None , params = None , headers = None , propagate_headers = False , ** kwargs ):
146
+ def get (self , url : str , path_params : dict = None , params : dict = None , headers : dict = None ,
147
+ propagate_headers : bool = False , ** kwargs ) -> Response :
146
148
"""Sends a GET request.
147
149
148
150
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -167,7 +169,8 @@ def get(self, url, path_params=None, params=None, headers=None, propagate_header
167
169
168
170
return response
169
171
170
- def get_for_object (self , url , path_params = None , params = None , headers = None , ** kwargs ):
172
+ def get_for_object (self , url : str , path_params : dict = None , params : dict = None , headers : dict = None ,
173
+ ** kwargs ) -> dict :
171
174
"""Sends a GET request and returns the json representation found in response's content data node.
172
175
173
176
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -184,7 +187,8 @@ def get_for_object(self, url, path_params=None, params=None, headers=None, **kwa
184
187
return self .parse_response (response )
185
188
186
189
@retry
187
- def post (self , url , path_params = None , data = None , json = None , headers = None , ** kwargs ):
190
+ def post (self , url : str , path_params : dict = None , data : dict = None , json : dict = None , headers : dict = None ,
191
+ ** kwargs ) -> Response :
188
192
"""Sends a POST request.
189
193
190
194
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -210,7 +214,8 @@ def post(self, url, path_params=None, data=None, json=None, headers=None, **kwar
210
214
211
215
return response
212
216
213
- def post_for_object (self , url , path_params = None , data = None , json = None , headers = None , ** kwargs ):
217
+ def post_for_object (self , url : str , path_params : dict = None , data : dict = None , json : dict = None ,
218
+ headers : dict = None , ** kwargs ) -> dict :
214
219
"""Sends a POST request and returns the json representation found in response's content data node.
215
220
216
221
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -228,7 +233,7 @@ def post_for_object(self, url, path_params=None, data=None, json=None, headers=N
228
233
return self .parse_response (response )
229
234
230
235
@retry
231
- def put (self , url , path_params = None , data = None , headers = None , ** kwargs ):
236
+ def put (self , url : str , path_params : dict = None , data : dict = None , headers : dict = None , ** kwargs ) -> Response :
232
237
"""Sends a PUT request.
233
238
234
239
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -254,7 +259,8 @@ def put(self, url, path_params=None, data=None, headers=None, **kwargs):
254
259
255
260
return response
256
261
257
- def put_for_object (self , url , path_params = None , data = None , headers = None , ** kwargs ):
262
+ def put_for_object (self , url : str , path_params : dict = None , data : dict = None , headers : dict = None ,
263
+ ** kwargs ) -> dict :
258
264
"""Sends a PUT request and returns the json representation found in response's content data node.
259
265
260
266
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -272,7 +278,7 @@ def put_for_object(self, url, path_params=None, data=None, headers=None, **kwarg
272
278
return self .parse_response (response )
273
279
274
280
@retry
275
- def patch (self , url , path_params = None , data = None , headers = None , ** kwargs ):
281
+ def patch (self , url : str , path_params : dict = None , data : dict = None , headers : dict = None , ** kwargs ) -> Response :
276
282
"""Sends a PATCH request.
277
283
278
284
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -298,7 +304,8 @@ def patch(self, url, path_params=None, data=None, headers=None, **kwargs):
298
304
299
305
return response
300
306
301
- def patch_for_object (self , url , path_params = None , data = None , headers = None , ** kwargs ):
307
+ def patch_for_object (self , url : str , path_params : dict = None , data : dict = None , headers : dict = None ,
308
+ ** kwargs ) -> dict :
302
309
"""Sends a PATCH request and returns the json representation found in response's content data node.
303
310
304
311
:param url: URL for the new :class:`Request` object. Could contain path parameters
@@ -316,7 +323,7 @@ def patch_for_object(self, url, path_params=None, data=None, headers=None, **kwa
316
323
return self .parse_response (response )
317
324
318
325
@retry
319
- def delete (self , url , path_params = None , headers = None , ** kwargs ):
326
+ def delete (self , url : str , path_params : dict = None , headers : dict = None , ** kwargs ) -> Response :
320
327
"""Sends a DELETE request.
321
328
322
329
:param url: URL for the new :class:`Request` object. Could contain path parameters
0 commit comments