2323 JWTRefreshError ,
2424 ServerConnectionError ,
2525)
26- from arango .http import HTTPClient
26+ from arango .http import HTTPClient , RequestCompression
2727from arango .request import Request
2828from arango .resolver import HostResolver
2929from arango .response import Response
@@ -44,6 +44,8 @@ def __init__(
4444 http_client : HTTPClient ,
4545 serializer : Callable [..., str ],
4646 deserializer : Callable [[str ], Any ],
47+ request_compression : Optional [RequestCompression ] = None ,
48+ response_compression : Optional [str ] = None ,
4749 ) -> None :
4850 self ._url_prefixes = [f"{ host } /_db/{ db_name } " for host in hosts ]
4951 self ._host_resolver = host_resolver
@@ -53,6 +55,8 @@ def __init__(
5355 self ._serializer = serializer
5456 self ._deserializer = deserializer
5557 self ._username : Optional [str ] = None
58+ self ._request_compression = request_compression
59+ self ._response_compression = response_compression
5660
5761 @property
5862 def db_name (self ) -> str :
@@ -133,14 +137,27 @@ def process_request(
133137 """
134138 tries = 0
135139 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+
136153 while tries < self ._host_resolver .max_tries :
137154 try :
138155 resp = self ._http .send_request (
139156 session = self ._sessions [host_index ],
140157 method = request .method ,
141158 url = self ._url_prefixes [host_index ] + request .endpoint ,
142159 params = request .params ,
143- data = self . normalize_data ( request . data ) ,
160+ data = data ,
144161 headers = request .headers ,
145162 auth = auth ,
146163 )
@@ -243,6 +260,10 @@ class BasicConnection(BaseConnection):
243260 :type password: str
244261 :param http_client: User-defined HTTP client.
245262 :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
246267 """
247268
248269 def __init__ (
@@ -256,6 +277,8 @@ def __init__(
256277 http_client : HTTPClient ,
257278 serializer : Callable [..., str ],
258279 deserializer : Callable [[str ], Any ],
280+ request_compression : Optional [RequestCompression ] = None ,
281+ response_compression : Optional [str ] = None ,
259282 ) -> None :
260283 super ().__init__ (
261284 hosts ,
@@ -265,6 +288,8 @@ def __init__(
265288 http_client ,
266289 serializer ,
267290 deserializer ,
291+ request_compression ,
292+ response_compression ,
268293 )
269294 self ._username = username
270295 self ._auth = (username , password )
@@ -298,6 +323,10 @@ class JwtConnection(BaseConnection):
298323 :type password: str
299324 :param http_client: User-defined HTTP client.
300325 :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
301330 """
302331
303332 def __init__ (
@@ -312,6 +341,8 @@ def __init__(
312341 username : Optional [str ] = None ,
313342 password : Optional [str ] = None ,
314343 user_token : Optional [str ] = None ,
344+ request_compression : Optional [RequestCompression ] = None ,
345+ response_compression : Optional [str ] = None ,
315346 ) -> None :
316347 super ().__init__ (
317348 hosts ,
@@ -321,6 +352,8 @@ def __init__(
321352 http_client ,
322353 serializer ,
323354 deserializer ,
355+ request_compression ,
356+ response_compression ,
324357 )
325358 self ._username = username
326359 self ._password = password
@@ -439,6 +472,10 @@ class JwtSuperuserConnection(BaseConnection):
439472 :type http_client: arango.http.HTTPClient
440473 :param superuser_token: User generated token for superuser access.
441474 :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
442479 """
443480
444481 def __init__ (
@@ -451,6 +488,8 @@ def __init__(
451488 serializer : Callable [..., str ],
452489 deserializer : Callable [[str ], Any ],
453490 superuser_token : str ,
491+ request_compression : Optional [RequestCompression ] = None ,
492+ response_compression : Optional [str ] = None ,
454493 ) -> None :
455494 super ().__init__ (
456495 hosts ,
@@ -460,6 +499,8 @@ def __init__(
460499 http_client ,
461500 serializer ,
462501 deserializer ,
502+ request_compression ,
503+ response_compression ,
463504 )
464505 self ._auth_header = f"bearer { superuser_token } "
465506
0 commit comments