8
8
DEFAULT_TIMEOUT = 30.0
9
9
RETRY_STATUS_CODES = {429 , 500 , 502 , 503 , 504 }
10
10
11
+
11
12
class AsyncHTTPClient (ABC ):
12
13
@abstractmethod
13
14
async def get (
14
15
self ,
15
16
path : str ,
16
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
17
+ params : Optional [
18
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
19
+ ] = None ,
17
20
headers : Optional [Mapping [str , str ]] = None ,
18
21
timeout : Optional [float ] = None ,
19
- expect_json : bool = True
22
+ expect_json : bool = True ,
20
23
) -> Union [HttpResponse , Any ]:
21
24
"""
22
25
Invoke HTTP GET request."""
@@ -26,10 +29,12 @@ async def get(
26
29
async def delete (
27
30
self ,
28
31
path : str ,
29
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
32
+ params : Optional [
33
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
34
+ ] = None ,
30
35
headers : Optional [Mapping [str , str ]] = None ,
31
36
timeout : Optional [float ] = None ,
32
- expect_json : bool = True
37
+ expect_json : bool = True ,
33
38
) -> Union [HttpResponse , Any ]:
34
39
"""
35
40
Invoke HTTP DELETE request."""
@@ -41,10 +46,12 @@ async def post(
41
46
path : str ,
42
47
json_body : Optional [Any ] = None ,
43
48
data : Optional [Union [bytes , str ]] = None ,
44
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
49
+ params : Optional [
50
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
51
+ ] = None ,
45
52
headers : Optional [Mapping [str , str ]] = None ,
46
53
timeout : Optional [float ] = None ,
47
- expect_json : bool = True
54
+ expect_json : bool = True ,
48
55
) -> Union [HttpResponse , Any ]:
49
56
"""
50
57
Invoke HTTP POST request."""
@@ -56,10 +63,12 @@ async def put(
56
63
path : str ,
57
64
json_body : Optional [Any ] = None ,
58
65
data : Optional [Union [bytes , str ]] = None ,
59
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
66
+ params : Optional [
67
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
68
+ ] = None ,
60
69
headers : Optional [Mapping [str , str ]] = None ,
61
70
timeout : Optional [float ] = None ,
62
- expect_json : bool = True
71
+ expect_json : bool = True ,
63
72
) -> Union [HttpResponse , Any ]:
64
73
"""
65
74
Invoke HTTP PUT request."""
@@ -71,10 +80,12 @@ async def patch(
71
80
path : str ,
72
81
json_body : Optional [Any ] = None ,
73
82
data : Optional [Union [bytes , str ]] = None ,
74
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
83
+ params : Optional [
84
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
85
+ ] = None ,
75
86
headers : Optional [Mapping [str , str ]] = None ,
76
87
timeout : Optional [float ] = None ,
77
- expect_json : bool = True
88
+ expect_json : bool = True ,
78
89
) -> Union [HttpResponse , Any ]:
79
90
"""
80
91
Invoke HTTP PATCH request."""
@@ -85,7 +96,9 @@ async def request(
85
96
self ,
86
97
method : str ,
87
98
path : str ,
88
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
99
+ params : Optional [
100
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
101
+ ] = None ,
89
102
headers : Optional [Mapping [str , str ]] = None ,
90
103
body : Optional [Union [bytes , str ]] = None ,
91
104
timeout : Optional [float ] = None ,
@@ -94,15 +107,13 @@ async def request(
94
107
Invoke HTTP request with given method."""
95
108
pass
96
109
110
+
97
111
class AsyncHTTPClientWrapper (AsyncHTTPClient ):
98
112
"""
99
113
An async wrapper around sync HTTP client with thread pool execution.
100
114
"""
101
- def __init__ (
102
- self ,
103
- client : HttpClient ,
104
- max_workers : int = 10
105
- ) -> None :
115
+
116
+ def __init__ (self , client : HttpClient , max_workers : int = 10 ) -> None :
106
117
"""
107
118
Initialize a new HTTP client instance.
108
119
@@ -121,89 +132,121 @@ def __init__(
121
132
async def get (
122
133
self ,
123
134
path : str ,
124
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
135
+ params : Optional [
136
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
137
+ ] = None ,
125
138
headers : Optional [Mapping [str , str ]] = None ,
126
139
timeout : Optional [float ] = None ,
127
- expect_json : bool = True
140
+ expect_json : bool = True ,
128
141
) -> Union [HttpResponse , Any ]:
129
142
loop = asyncio .get_event_loop ()
130
143
return await loop .run_in_executor (
131
- self ._executor ,
132
- self .client .get ,
133
- path , params , headers , timeout , expect_json
144
+ self ._executor , self .client .get , path , params , headers , timeout , expect_json
134
145
)
135
146
136
147
async def delete (
137
148
self ,
138
149
path : str ,
139
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
150
+ params : Optional [
151
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
152
+ ] = None ,
140
153
headers : Optional [Mapping [str , str ]] = None ,
141
154
timeout : Optional [float ] = None ,
142
- expect_json : bool = True
155
+ expect_json : bool = True ,
143
156
) -> Union [HttpResponse , Any ]:
144
157
loop = asyncio .get_event_loop ()
145
158
return await loop .run_in_executor (
146
159
self ._executor ,
147
160
self .client .delete ,
148
- path , params , headers , timeout , expect_json
161
+ path ,
162
+ params ,
163
+ headers ,
164
+ timeout ,
165
+ expect_json ,
149
166
)
150
167
151
168
async def post (
152
169
self ,
153
170
path : str ,
154
171
json_body : Optional [Any ] = None ,
155
172
data : Optional [Union [bytes , str ]] = None ,
156
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
173
+ params : Optional [
174
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
175
+ ] = None ,
157
176
headers : Optional [Mapping [str , str ]] = None ,
158
177
timeout : Optional [float ] = None ,
159
- expect_json : bool = True
178
+ expect_json : bool = True ,
160
179
) -> Union [HttpResponse , Any ]:
161
180
loop = asyncio .get_event_loop ()
162
181
return await loop .run_in_executor (
163
182
self ._executor ,
164
183
self .client .post ,
165
- path , json_body , data , params , headers , timeout , expect_json
184
+ path ,
185
+ json_body ,
186
+ data ,
187
+ params ,
188
+ headers ,
189
+ timeout ,
190
+ expect_json ,
166
191
)
167
192
168
193
async def put (
169
194
self ,
170
195
path : str ,
171
196
json_body : Optional [Any ] = None ,
172
197
data : Optional [Union [bytes , str ]] = None ,
173
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
198
+ params : Optional [
199
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
200
+ ] = None ,
174
201
headers : Optional [Mapping [str , str ]] = None ,
175
202
timeout : Optional [float ] = None ,
176
- expect_json : bool = True
203
+ expect_json : bool = True ,
177
204
) -> Union [HttpResponse , Any ]:
178
205
loop = asyncio .get_event_loop ()
179
206
return await loop .run_in_executor (
180
207
self ._executor ,
181
208
self .client .put ,
182
- path , json_body , data , params , headers , timeout , expect_json
209
+ path ,
210
+ json_body ,
211
+ data ,
212
+ params ,
213
+ headers ,
214
+ timeout ,
215
+ expect_json ,
183
216
)
184
217
185
218
async def patch (
186
219
self ,
187
220
path : str ,
188
221
json_body : Optional [Any ] = None ,
189
222
data : Optional [Union [bytes , str ]] = None ,
190
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
223
+ params : Optional [
224
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
225
+ ] = None ,
191
226
headers : Optional [Mapping [str , str ]] = None ,
192
227
timeout : Optional [float ] = None ,
193
- expect_json : bool = True
228
+ expect_json : bool = True ,
194
229
) -> Union [HttpResponse , Any ]:
195
230
loop = asyncio .get_event_loop ()
196
231
return await loop .run_in_executor (
197
232
self ._executor ,
198
233
self .client .patch ,
199
- path , json_body , data , params , headers , timeout , expect_json
234
+ path ,
235
+ json_body ,
236
+ data ,
237
+ params ,
238
+ headers ,
239
+ timeout ,
240
+ expect_json ,
200
241
)
201
242
202
243
async def request (
203
244
self ,
204
245
method : str ,
205
246
path : str ,
206
- params : Optional [Mapping [str , Union [None , str , int , float , bool , list , tuple ]]] = None ,
247
+ params : Optional [
248
+ Mapping [str , Union [None , str , int , float , bool , list , tuple ]]
249
+ ] = None ,
207
250
headers : Optional [Mapping [str , str ]] = None ,
208
251
body : Optional [Union [bytes , str ]] = None ,
209
252
timeout : Optional [float ] = None ,
@@ -212,5 +255,10 @@ async def request(
212
255
return await loop .run_in_executor (
213
256
self ._executor ,
214
257
self .client .request ,
215
- method , path , params , headers , body , timeout
258
+ method ,
259
+ path ,
260
+ params ,
261
+ headers ,
262
+ body ,
263
+ timeout ,
216
264
)
0 commit comments