23
23
JWTRefreshError ,
24
24
ServerConnectionError ,
25
25
)
26
- from arango .http import HTTPClient
26
+ from arango .http import HTTPClient , RequestCompression
27
27
from arango .request import Request
28
28
from arango .resolver import HostResolver
29
29
from arango .response import Response
@@ -44,6 +44,8 @@ def __init__(
44
44
http_client : HTTPClient ,
45
45
serializer : Callable [..., str ],
46
46
deserializer : Callable [[str ], Any ],
47
+ request_compression : Optional [RequestCompression ] = None ,
48
+ response_compression : Optional [str ] = None ,
47
49
) -> None :
48
50
self ._url_prefixes = [f"{ host } /_db/{ db_name } " for host in hosts ]
49
51
self ._host_resolver = host_resolver
@@ -53,6 +55,8 @@ def __init__(
53
55
self ._serializer = serializer
54
56
self ._deserializer = deserializer
55
57
self ._username : Optional [str ] = None
58
+ self ._request_compression = request_compression
59
+ self ._response_compression = response_compression
56
60
57
61
@property
58
62
def db_name (self ) -> str :
@@ -133,14 +137,27 @@ def process_request(
133
137
"""
134
138
tries = 0
135
139
indexes_to_filter : Set [int ] = set ()
140
+
141
+ data = self .normalize_data (request .data )
142
+ if (
143
+ self ._request_compression is not None
144
+ and isinstance (data , str )
145
+ and self ._request_compression .needs_compression (data )
146
+ ):
147
+ request .headers ["content-encoding" ] = self ._request_compression .encoding ()
148
+ data = self ._request_compression .compress (data )
149
+
150
+ if self ._response_compression is not None :
151
+ request .headers ["accept-encoding" ] = self ._response_compression
152
+
136
153
while tries < self ._host_resolver .max_tries :
137
154
try :
138
155
resp = self ._http .send_request (
139
156
session = self ._sessions [host_index ],
140
157
method = request .method ,
141
158
url = self ._url_prefixes [host_index ] + request .endpoint ,
142
159
params = request .params ,
143
- data = self . normalize_data ( request . data ) ,
160
+ data = data ,
144
161
headers = request .headers ,
145
162
auth = auth ,
146
163
)
@@ -243,6 +260,10 @@ class BasicConnection(BaseConnection):
243
260
:type password: str
244
261
:param http_client: User-defined HTTP client.
245
262
:type http_client: arango.http.HTTPClient
263
+ :param: request_compression: The request compression algorithm.
264
+ :type request_compression: arango.http.RequestCompression | None
265
+ :param: response_compression: The response compression algorithm.
266
+ :type response_compression: str | None
246
267
"""
247
268
248
269
def __init__ (
@@ -256,6 +277,8 @@ def __init__(
256
277
http_client : HTTPClient ,
257
278
serializer : Callable [..., str ],
258
279
deserializer : Callable [[str ], Any ],
280
+ request_compression : Optional [RequestCompression ] = None ,
281
+ response_compression : Optional [str ] = None ,
259
282
) -> None :
260
283
super ().__init__ (
261
284
hosts ,
@@ -265,6 +288,8 @@ def __init__(
265
288
http_client ,
266
289
serializer ,
267
290
deserializer ,
291
+ request_compression ,
292
+ response_compression ,
268
293
)
269
294
self ._username = username
270
295
self ._auth = (username , password )
@@ -298,6 +323,10 @@ class JwtConnection(BaseConnection):
298
323
:type password: str
299
324
:param http_client: User-defined HTTP client.
300
325
:type http_client: arango.http.HTTPClient
326
+ :param request_compression: The request compression algorithm.
327
+ :type request_compression: arango.http.RequestCompression | None
328
+ :param response_compression: The response compression algorithm.
329
+ :type response_compression: str | None
301
330
"""
302
331
303
332
def __init__ (
@@ -312,6 +341,8 @@ def __init__(
312
341
username : Optional [str ] = None ,
313
342
password : Optional [str ] = None ,
314
343
user_token : Optional [str ] = None ,
344
+ request_compression : Optional [RequestCompression ] = None ,
345
+ response_compression : Optional [str ] = None ,
315
346
) -> None :
316
347
super ().__init__ (
317
348
hosts ,
@@ -321,6 +352,8 @@ def __init__(
321
352
http_client ,
322
353
serializer ,
323
354
deserializer ,
355
+ request_compression ,
356
+ response_compression ,
324
357
)
325
358
self ._username = username
326
359
self ._password = password
@@ -439,6 +472,10 @@ class JwtSuperuserConnection(BaseConnection):
439
472
:type http_client: arango.http.HTTPClient
440
473
:param superuser_token: User generated token for superuser access.
441
474
:type superuser_token: str
475
+ :param request_compression: The request compression algorithm.
476
+ :type request_compression: arango.http.RequestCompression | None
477
+ :param response_compression: The response compression algorithm.
478
+ :type response_compression: str | None
442
479
"""
443
480
444
481
def __init__ (
@@ -451,6 +488,8 @@ def __init__(
451
488
serializer : Callable [..., str ],
452
489
deserializer : Callable [[str ], Any ],
453
490
superuser_token : str ,
491
+ request_compression : Optional [RequestCompression ] = None ,
492
+ response_compression : Optional [str ] = None ,
454
493
) -> None :
455
494
super ().__init__ (
456
495
hosts ,
@@ -460,6 +499,8 @@ def __init__(
460
499
http_client ,
461
500
serializer ,
462
501
deserializer ,
502
+ request_compression ,
503
+ response_compression ,
463
504
)
464
505
self ._auth_header = f"bearer { superuser_token } "
465
506
0 commit comments