
    k7i                         S SK r S SKrS SKrS SKJr  S SKJrJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  SrS	rS
rSr " S S\5      rg)    N)Sequence)AnySupportsFloat)ManagedEntry)override)AsyncKeyValue)BaseWrapper__compressed_data____compression_version__   __compression_algorithm__c                     ^  \ rS rSrSr SS\S\SS4U 4S jjjrS\\	\
4   S\4S	 jrS\\	\
4   S\\	\
4   4S
 jrS\\	\
4   S-  S\\	\
4   S-  4S jr\SS.S\	S\	S-  S\\	\
4   S-  4S jj5       r\SS.S\\	   S\	S-  S\\\	\
4   S-     4S jj5       r\SS.S\	S\	S-  S\\\	\
4   S-  \S-  4   4S jj5       r\SS.S\\	   S\	S-  S\\\\	\
4   S-  \S-  4      4S jj5       r\SSS.S\	S\\	\
4   S\	S-  S\S-  SS4
S jj5       r\SSS.S\\	   S\\\	\
4      S\	S-  S\\S-     S-  SS4
S jj5       rSrU =r$ )CompressionWrapper   a  Wrapper that compresses values before storing and decompresses on retrieval.

This wrapper compresses the JSON-serialized value using the specified compression algorithm and stores it as a
base64-encoded string within a special key in the dictionary. This allows compression
while maintaining the dict[str, Any] interface.

The compressed format looks like:
{
    "__compressed_data__": "base64-encoded-compressed-data",
    "__compression_algorithm__": "gzip",
    "__compression_version__": 1
}
	key_valuemin_size_to_compressreturnNc                 :   > Xl         X l        [        TU ]  5         g)zInitialize the compression wrapper.

Args:
    key_value: The store to wrap.
    min_size_to_compress: Only compress values larger than this many bytes.
                         Defaults to 1024 bytes (1KB).
N)r   r   super__init__)selfr   r   	__class__s      d/home/james-whalen/.local/lib/python3.13/site-packages/key_value/aio/wrappers/compression/wrapper.pyr   CompressionWrapper.__init__#   s     )2)=!    valuec                 t    [         U;   a  g[        [        US9R                  5       5      nX R                  :  $ )z<Determine if a value should be compressed based on its size.F)r   )_COMPRESSED_DATA_KEYlenr   to_jsonr   )r   r   	item_sizes      r   _should_compress#CompressionWrapper._should_compress4   s8      5( \6>>@A	5555r   c                 "   U R                  U5      (       d  U$ [        R                  " USS9nUR                  S5      n[        R
                  " USS9n[        R                  " U5      R                  S5      n[        U[        [        [        S0$ )z,Compress a value into the compressed format.),:)
separatorsutf-8r   )compresslevelasciigzip)r"   jsondumpsencoder+   compressbase64	b64encodedecoder   _COMPRESSION_VERSION_KEY_COMPRESSION_VERSION_COMPRESSION_ALGORITHM_KEY)r   r   json_str
json_bytescompressed_bytes
base64_strs         r   _compress_value"CompressionWrapper._compress_value>   s    $$U++L ::e
;__W-
  ==1E %%&67>>wG
 !*$&:&
 	
r   c                 .   Uc  g[         U;  a  U$ U[            n[        U[        5      (       d  U$  [        R                  " U5      n[
        R                  " U5      nUR                  S5      n[        R                  " U5      $ ! [         a    Us $ f = f)z.Decompress a value from the compressed format.Nr(   )r   
isinstancestrr0   	b64decoder+   
decompressr2   r,   loads	Exception)r   r   r9   r8   r7   r6   s         r   _decompress_value$CompressionWrapper._decompress_valueS   s    =  u,L /0
*c**L	%//
; )9:J "((1H::h'' 	 L	s   AB BB)
collectionkeyrE   c                r   #    U R                   R                  XS9I S h  vN nU R                  U5      $  N7fN)rF   rE   )r   getrC   )r   rF   rE   r   s       r   rI   CompressionWrapper.getq   s6     nn((S(HH%%e,, Is   757keysc                   #    U R                   R                  XS9I S h  vN nU Vs/ s H  o@R                  U5      PM     sn$  N%s  snf 7fN)rK   rE   )r   get_manyrC   )r   rK   rE   valuesr   s        r   rN   CompressionWrapper.get_manyv   sF     ~~..D.PP;AB6%&&u-6BB QBs    AAAAAAc                z   #    U R                   R                  XS9I S h  vN u  p4U R                  U5      U4$  N7frH   )r   ttlrC   )r   rF   rE   r   rR   s        r   rR   CompressionWrapper.ttl{   s=     >>--#-MM
%%e,c11 Ns   ;9;c                   #    U R                   R                  XS9I S h  vN nU VVs/ s H  u  pEU R                  U5      U4PM     snn$  N,s  snnf 7frM   )r   ttl_manyrC   )r   rK   rE   resultsr   rR   s         r   rU   CompressionWrapper.ttl_many   sO     //T/QQGNOw''.4wOO ROs    AA	AAAA)rE   rR   rR   c                t   #    U R                  U5      nU R                  R                  XX4S9I S h  vN $  N7f)N)rF   r   rE   rR   )r:   r   put)r   rF   r   rE   rR   compressed_values         r   rY   CompressionWrapper.put   s7     //6^^''CT^'hhhhs   /868rO   c                   #    U Vs/ s H  oPR                  U5      PM     nnU R                  R                  XX4S9I S h  vN $ s  snf  N	7f)N)rK   rO   rE   rR   )r:   r   put_many)r   rK   rO   rE   rR   r   compressed_valuess          r   r]   CompressionWrapper.put_many   sN      GMMfU11%8fM^^,,$]g,qqq Nqs   AAA A

A)r   r   )i   )__name__
__module____qualname____firstlineno____doc__r   intr   dictr>   r   boolr"   r:   rC   r   rI   listrN   tuplefloatrR   rU   r   rY   r   r]   __static_attributes____classcell__)r   s   @r   r   r      s   " %)  " 
	 "6d38n 6 6
T#s(^ 
S#X 
*tCH~'< c3hRVAV < >B -S -t -tCQTH~X\G\ - - JN C49 CS4Z CSWX\]`be]eXfimXmSn C C >B 2S 2t 2uTRUWZRZ^^bMbdilpdpMpGq 2 2 JN P49 PS4Z PSWX]^bcfhkck^los^suz  ~B  vB  _B  YC  TD P P UYw{ iS ic3h id
 i`mpt`t i  AE i i  "&59	r3i	r c3h(	r
 $J	r md*+d2	r 
	r 	rr   r   )r0   r+   r,   collections.abcr   typingr   r   $key_value.shared.utils.managed_entryr   typing_extensionsr   !key_value.aio.protocols.key_valuer   key_value.aio.wrappers.baser	   r   r3   r4   r5   r    r   r   <module>rt      sJ       $ % = & ; 3 - 4  8 @r @rr   