
    j                       d dl mZ d dlZd dlZd dlmZ ddlmZmZ ddl	m
Z
mZmZ erddlmZmZmZmZ ddlmZ d	 Zd*dZd+dZ G d d          Z G d d          Z G d d          Z G d de          Zej        Zd,dZd,dZ eeee           	 	 	 	 d-d.d$Z d/d(Z! e ej"        )          Z# e ej$        )          Z%dS )0    )annotationsN)TYPE_CHECKING   )SignIsMissingErrorUnSecureDataError)PicklerPicklerTypeget_pickler)ICustomDecoderICustomEncoderKeyValue)Backendc                     d fd}|S )Nkeybytesvaluereturnc                x    t          j        | |                                                                          S N)hmacnew	hexdigestencode)r   r   	digestmods     \/DATA/AppData/hermes/projects/honcho/.venv/lib/python3.11/site-packages/cashews/serialize.pysignz_seal.<locals>.sign   s/    xUI..88::AACCC    r   r   r   r   r   r    )r   r   s   ` r   _sealr!      s.    D D D D D D Kr   r   r   r   r   c                l    t          |           t          |          z   }|d                                S )Nx)sumr   )r   r   ss      r   simple_signr&      s,    C3u::A88??r   str | bytesc                X    t          | t                    r|                                 } | S r   )
isinstancestrr   )r   s    r   	_to_bytesr+      s&    % Lr   c                      e Zd Z eej                   eej                   eej                  edZ	dddZ
ddZddZddZddZdS )
HashSigner)s   sha1   md5s   sha256s   sumr.   secretr'   r   c                V    t          |          | _        t          |          | _        d S r   )r+   _secret
_digestmod)selfr/   r   s      r   __init__zHashSigner.__init__)   s$     ((#I..r   r   r   r   r   r   c                `    |                      ||| j                  }| j        dz   |z   dz   |z   S )N   :   _)	_gen_signr2   )r3   r   r   r   s       r   r   zHashSigner.sign-   s5    ~~c5$/::%,t3e;;r   c                   	 |                     dd          \  }}n%# t          $ r}t          d|           |d }~ww xY w|                     |          \  }}|                     |||          }||k    rt          |d|          |S )Nr7   r   maxsplitzkey: z != )split
ValueErrorr   _get_sign_and_digestmodr8   r   )r3   r   r   r   excr   expected_signs          r   
check_signzHashSigner.check_sign1   s    	=++dQ+77KD%% 	= 	= 	=$]S]]33<	= 66t<<isE9==D  #}$D$DD$D$DEEEs    
?:?c                h    |                                 |z   } | j        |         | j        |          S r   )r   _digestmodsr1   )r3   r   r   r   s       r   r8   zHashSigner._gen_sign=   s0    

u$*t	*4<???r   r   tuple[bytes, bytes]c                    | j         }d|v r|                    dd          \  }}|| j        vrt                      ||fS Nr6   r   r:   )r2   r<   rC   r   )r3   r   r   s      r   r>   z"HashSigner._get_sign_and_digestmodA   sO    O	4<<"jjj::OItD,,,#%%%Yr   N)r.   )r/   r'   r   r'   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   rD   )__name__
__module____qualname__r!   hashlibsha1md5sha256r&   rC   r4   r   rA   r8   r>   r    r   r   r-   r-   !   s        w|$$gk""5((	 K/ / / / /< < < <
 
 
 
@ @ @ @     r   r-   c                  >    e Zd Zed	d            Zed	d            ZdS )

NullSignerr   r   r   r   r   c                    |S r   r    r   r   s     r   r   zNullSigner.signK       r   c                    |S r   r    rR   s     r   rA   zNullSigner.check_signO   rS   r   NrG   )rH   rI   rJ   staticmethodr   rA   r    r   r   rP   rP   J   sR           \    \  r   rP   c                  r    e Zd ZU i Zded<   ddZd Zd Zedd	            Z	ddZ
ddZd dZd!dZd dZdS )"
Serializerz2dict[bytes, tuple[ICustomEncoder, ICustomDecoder]]_type_mappingFc                v    || _         t          t          j                  | _        t                      | _        d S r   )_check_reprr
   r	   NULL_picklerrP   _signer)r3   
check_reprs     r   r4   zSerializer.__init__W   s+    %#K$455!||r   c                    || _         d S r   )r]   )r3   signers     r   
set_signerzSerializer.set_signer\   s    r   c                    || _         d S r   )r\   )r3   picklers     r   set_picklerzSerializer.set_pickler_   s    r   klasstypec                D    ||f| j         t          |j        d          <   d S )Nutf8)rX   r   rH   )clsre   encoderdecoders       r   register_typezSerializer.register_typeb   s&    <CW;M%77888r   backendr   r   r   r   r   expirefloat | Noner   r   c                :  K   t          |t                    rt          |t                    s|S |                     ||||           d {V }|| j                            ||          S | j                            || j                            |                    S r   )r)   intbool_custom_encoder]   r   r\   dumps)r3   rm   r   r   rn   _values         r   r   zSerializer.encodef   s      eS!! 	*UD*A*A 	L**7CGGGGGGGG<$$S&111|  dm&9&9%&@&@AAAr   bytes | Nonec                   K   t          t          |          j        d          }|| j        vrd S | j        |         \  }} |||||           d {V }|dz   |z   S )Nrh   r6   )r   rf   rH   rX   )	r3   rm   r   r   rn   
value_typerj   _encoded_values	            r   rs   zSerializer._custom_encoden   sy      4;;/88
T///4'
3
%geWc6BBBBBBBBD =00r   defaultc                  K   ||u r|S t          |t                    s|S |                                rt          |          S 	 | j                            ||          }n# t          $ r |cY S w xY w	 |                     |          }n"# | j        j	        $ r Y nt          $ r |cY S w xY wt          |t                    r|                     ||||           d {V S |S r   )r)   r   isdigitrq   r]   rA   r   _decoder\   UnpicklingErrorAttributeError_custom_decode)r3   rm   r   r   r{   s        r   decodezSerializer.decodev   s'     GN%'' 	L==?? 	u::	L++C77EE! 	 	 	NNN		LL''EE}, 	 	 	D 	 	 	NNN	eU## 	K,,Wc5'JJJJJJJJJs*   A   A/.A/3B	 	B(B('B(c                f    | j                             |          }| j        rt          |           |S r   )r\   loadsrZ   repr)r3   r   s     r   r~   zSerializer._decode   s2    ##E** 	KKKr   c                   K   	 |                     dd          \  }}n# t          $ r |cY S w xY w|| j        vr|S | j        |         \  }}	  ||||           d {V S # t          $ r |cY S w xY wrF   )r<   r=   rX   DecodeError)r3   rm   r   r   r{   rx   ry   rk   s           r   r   zSerializer._custom_decode   s      	 %D1 = =J 	 	 	NNN	T///N'
3
7	 555555555 	 	 	NNN	s    ..A   A/.A/N)F)re   rf   )
rm   r   r   r   r   r   rn   ro   r   r   )r   r   r   r   rn   ro   r   rv   )
rm   r   r   r   r   r   r{   r   r   r   )r   r   r   r   )rH   rI   rJ   rX   __annotations__r4   ra   rd   classmethodrl   r   rs   r   r~   r   r    r   r   rW   rW   T   s         HJMJJJJ$ $ $ $
        N N N [NB B B B1 1 1 1   ,        r   rW   c                      e Zd ZdS )r   N)rH   rI   rJ   r    r   r   r   r      s        Dr   r   c                
   K   | S r   r    r   argskwargss      r   bytes_encoderr            Lr   c                
   K   | S r   r    r   s      r   bytes_decoderr      r   r   r.   Tr/   str | bytes | Noner   r^   rr   pickle_typePicklerType | Nonec                    t          |          }| r#|                    t          | |                     |                    t	          |pt
          j        t          |                                |S )N)r^   )rW   ra   r-   rd   _get_picklerr	   r[   rr   )r/   r   r^   r   _serializers        r   get_serializerr      sl     
333K >z&)<<===L)H8H$v,,WWXXXr   r	   hash_keyr   c                X    | t           j        u r|rt           j        } t          |           S r   )r	   r[   DEFAULTr
   )r   r   s     r   r   r      s+    k&&&8&!){###r   )r   r   )r   r'   r   r   )r   r   )Nr.   TN)
r/   r   r   r'   r^   rr   r   r   r   rW   )r   r	   r   rr   r   r   )&
__future__r   rK   r   typingr   
exceptionsr   r   picklersr   r	   r
   _typingr   r   r   r   backends.interfacer   r!   r&   r+   r-   rP   rW   	Exceptionr   rl   r   r   r   r   r   r   DEFAULT_SERIALIZERr[   NULL_SERIALIZERr    r   r   <module>r      sF   " " " " " "               = = = = = = = = 7 7 7 7 7 7 7 7 7 7 ,CCCCCCCCCCCC++++++     
   & & & & & & & &R       I I I I I I I IX	 	 	 	 	) 	 	 	 (       e]M 2 2 2 "&#&*	
 
 
 
 
$ $ $ $ $^0CDDD  .[-=>>>r   