o
    !2gA                     @  s   U d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZm
Z
mZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZ d d	lmZ d
dlmZm Z  ddl!m"Z"m#Z#m$Z$ G dd de"e$ Z%de&d< ej'dd
 dkrddiZ(ni Z(ed;i e(G dd dZ)ed;i e(G dd de)Z*ed;i e(G dd de)Z+ed;i e(G dd de)Z,ed;i e(G dd de)Z-ed;i e(G dd  d e)Z.ed;i e(G d!d" d"e)Z/ed;i e(G d#d$ d$e)Z0e1e2e3de4e5hZ6d%d& Z7ed;i e(G d'd( d(e)Z8zd dl9Z9W n e:y4   G d)d* d*Z;d<d-d.Z<Y nw e9j=Z;e9jZ<dZ>d
Z?ed;i e(G d/d0 d0e)Z@ed;i e(G d1d2 d2e)ZAe1ee4ee2e2e3de3de5e5eeiZBd=d4d5ZCd>d6d7ZDd?d9d:ZEdS )@    )annotationsN)abstractmethod)abc)	dataclassis_dataclass)datedatetimetimezone)Real)AnyDictList
NamedTupleOptionalSequenceTupleTypeUnionget_args
get_originget_type_hints)ZoneInfo   )TypeNotSupportedis_namedtuple   )AbstractMarshallJsonTc                   @  s*   e Zd ZdddZdd
dZdddZdS )CachewMarshallType_Type[T]returnNonec                 C  s   t || _d S N)build_schemaschema)selfr     r(   N/home/garg/my-data/venv/lib/python3.10/site-packages/cachew/marshall/cachew.py__init__$      zCachewMarshall.__init__objr   r   c                 C     | j |S r$   )r&   dumpr'   r,   r(   r(   r)   r.   '      zCachewMarshall.dumpdctc                 C  r-   r$   )r&   loadr'   r1   r(   r(   r)   r2   *   r0   zCachewMarshall.loadN)r    r!   r"   r#   )r,   r   r"   r   )r1   r   r"   r   )__name__
__module____qualname__r*   r.   r2   r(   r(   r(   r)   r   #   s    

r   zDict[str, bool]SLOTS   
   slotsTc                   @  s.   e Zd ZU ded< edd Zedd ZdS )Schemar   typec                 C     t r$   NotImplementedErrorr/   r(   r(   r)   r.   @      zSchema.dumpc                 C  r>   r$   r?   r3   r(   r(   r)   r2   D   rA   zSchema.loadN)r4   r5   r6   __annotations__r   r.   r2   r(   r(   r(   r)   r<   <   s   
 
r<   c                   @  s   e Zd Zdd Zdd ZdS )
SPrimitivec                 C     |S r$   r(   r/   r(   r(   r)   r.   K   s   zSPrimitive.dumpc                 C  rD   r$   r(   r3   r(   r(   r)   r2   S   s   zSPrimitive.loadNr4   r5   r6   r.   r2   r(   r(   r(   r)   rC   I   s    rC   c                   @  &   e Zd ZU ded< dd Zdd ZdS )
SDataclassztuple[tuple[str, Schema], ...]fieldsc                   s    fdd| j D S )Nc                   s"   i | ]\}}|| t |qS r(   )r.   getattr.0kksr,   r(   r)   
<dictcomp>c   s    z#SDataclass.dump.<locals>.<dictcomp>)rH   r/   r(   rN   r)   r.   _   s   
zSDataclass.dumpc                   s    | j di  fdd| jD S )Nc                   s    i | ]\}}||  | qS r(   r2   rJ   r1   r(   r)   rO   n   s    z#SDataclass.load.<locals>.<dictcomp>r(   r=   rH   r3   r(   rQ   r)   r2   k   s   
zSDataclass.loadNr4   r5   r6   rB   r.   r2   r(   r(   r(   r)   rG   Z   s   
 rG   c                   @  rF   )SUnionztuple[tuple[int, Schema], ...]argsc                 C  sT   |d u rdS | j D ]\}}t||jr||}||f  S q	td| j  d| )N)r   Nzshouldn't happen:  )rU   
isinstancer=   r.   RuntimeError)r'   r,   tidxajjr(   r(   r)   r.   z   s   
zSUnion.dumpc                 C  s,   |\}}|d u r
d S | j | \}}||S r$   )rU   r2   )r'   r1   rY   val_sr(   r(   r)   r2      s
   
zSUnion.loadNrS   r(   r(   r(   r)   rT   u   s   
 rT   c                   @  rF   )SListr<   argc                      t  fdd|D S )Nc                 3      | ]	} j |V  qd S r$   r`   r.   rK   ir'   r(   r)   	<genexpr>       zSList.dump.<locals>.<genexpr>tupler/   r(   rf   r)   r.         z
SList.dumpc                   s    fdd|D S )Nc                   s   g | ]} j |qS r(   r`   r2   rd   rf   r(   r)   
<listcomp>   s    zSList.load.<locals>.<listcomp>r(   r3   r(   rf   r)   r2      s   z
SList.loadNrS   r(   r(   r(   r)   r_         
 r_   c                   @  rF   )STupleztuple[Schema, ...]rU   c                 C     t dd t| j|D S )Nc                 s      | ]
\}}| |V  qd S r$   )r.   rK   rZ   re   r(   r(   r)   rg          zSTuple.dump.<locals>.<genexpr>rj   ziprU   r/   r(   r(   r)   r.         zSTuple.dumpc                 C  rp   )Nc                 s  rq   r$   rP   rr   r(   r(   r)   rg      rs   zSTuple.load.<locals>.<genexpr>rt   r3   r(   r(   r)   r2      rv   zSTuple.loadNrS   r(   r(   r(   r)   ro      rn   ro   c                   @  rF   )	SSequencer<   r`   c                   ra   )Nc                 3  rb   r$   rc   rd   rf   r(   r)   rg      rh   z!SSequence.dump.<locals>.<genexpr>ri   r/   r(   rf   r)   r.      rk   zSSequence.dumpc                   ra   )Nc                 3  rb   r$   rl   rd   rf   r(   r)   rg      rh   z!SSequence.load.<locals>.<genexpr>ri   r3   r(   rf   r)   r2      rk   zSSequence.loadNrS   r(   r(   r(   r)   rw      rn   rw   c                   @  s.   e Zd ZU ded< ded< dd Zdd Zd	S )
SDictrC   ftr<   ttc                       fdd|  D S )Nc                      i | ]\}}| j |qS r(   )rz   r.   rK   rL   vrf   r(   r)   rO          zSDict.dump.<locals>.<dictcomp>itemsr/   r(   rf   r)   r.         
z
SDict.dumpc                   r{   )Nc                   r|   r(   )rz   r2   r}   rf   r(   r)   rO      r   zSDict.load.<locals>.<dictcomp>r   r3   r(   rf   r)   r2      r   z
SDict.loadNrS   r(   r(   r(   r)   rx      s
   
 rx   c                 c  sH    | D ]}t |}|tv r|V  qt|tr| V  qt|V  qd S r$   )r=   JTypes
issubclassr   	isoformatstr)rU   rZ   atr(   r(   r)   _exc_helper   s   
r   c                   @  s    e Zd ZdddZddd	Zd
S )
SExceptionr,   	Exceptionr"   r   c                 C  s   t t|jS r$   )rj   r   rU   r/   r(   r(   r)   r.      r+   zSException.dumpr1   c                 C  s
   | j | S r$   r=   r3   r(   r(   r)   r2         
zSException.loadN)r,   r   r"   r   )r1   r   rE   r(   r(   r(   r)   r          
r   c                   @  s   e Zd ZU ded< dS )pytz_BaseTzInfor   zoneNr4   r5   r6   rB   r(   r(   r(   r)   r      s   
 r   r   r   c                 C  s   t d|  )NzInstall pytz to deserialize )rX   )r   r(   r(   r)   make_tz_pytz   r+   r   c                   @      e Zd ZdddZdd	d
ZdS )	SDatetimer,   r   r"   r   c                 C  sn   |  }|j}|d u r|d d fS t|tr||jtfS t|tr2|j}|d us-J ||f||tfS |d d fS r$   )	r   tzinforW   r   key_TZTAG_ZONEINFOr   r   _TZTAG_PYTZ)r'   r,   isotzr   r(   r(   r)   r.     s   




zSDatetime.dumpr1   rj   c                 C  sB   |\}}}t |}|d u r|S |tkrtnt}||}||S r$   )r   fromisoformatr   r   r   
astimezone)r'   r1   r   r   zone_tagdtmake_tzr   r(   r(   r)   r2     s   


zSDatetime.loadN)r,   r   r"   r   )r1   rj   rE   r(   r(   r(   r)   r     s    
r   c                   @  r   )SDater,   r   r"   r   c                 C  s   |  S r$   )r   r/   r(   r(   r)   r.   #  s   z
SDate.dumpr1   r   c                 C  s
   t |S r$   )r   r   r3   r(   r(   r)   r2   &  r   z
SDate.loadN)r,   r   r"   r   )r1   r   rE   r(   r(   r(   r)   r   !  r   r   r"   c              
   C  s  t | }|d urt|dS t| }|d u rkt| tr t| dS t| tr*t| dS t| t	r4t
| dS t| sAt| sAt| dzt| }W n tyY } zt| d|d }~ww tdd | D }t| |dS t| }tjd d dkr~|tju }nd}|tu p|}|rt| td	d t|D d
S |tu }	|	r|\}
t| t|
dS |tu p|tju }|r|tu r|dkrd}t | tdd |D d
S |\}
t!| t|
dS |t"u }|r|\}}t|}t|}t#|tsJ t$| ||dS t%d|  d| d| )Nr   )type_c                 s       | ]\}}|t |fV  qd S r$   r%   )rK   rL   tr(   r(   r)   rg   T  s    zbuild_schema.<locals>.<genexpr>rR   r   r8   Fc                 s  r   r$   r   )rK   rY   rZ   r(   r(   r)   rg   g  s
    

)r=   rU   )r=   r`   )r(   r(   c                 s  s    | ]}t |V  qd S r$   r   )rK   rZ   r(   r(   r)   rg     s    )r=   ry   rz   zunsupported: rV   )&
PRIMITIVESgetrC   r   r   r   r   r   r   r   r   r   r   r   r   	TypeErrorrj   r   rG   r   sysversion_infotypes	UnionTyper   rT   	enumeratelistr_   r%   r   r   ro   rw   dictrW   rx   rX   )r   ptypeoriginhintsterH   rU   is_uniontypeis_union
is_listishr   
is_tuplish
is_dictishry   rz   ftsttsr(   r(   r)   r%   :  s   









r%   c                 C  sT   |d u r| }t |}|| }||}dd }||||ks&J ||f||fS )Nc                 S  s6   t | trt| | jfS t| tu rdd | D S | S )Nc                 S  s(   g | ]}t |trt||jfn|qS r(   )rW   r   r=   rU   rd   r(   r(   r)   rm     s   ( z5_test_identity.<locals>.normalise.<locals>.<listcomp>)rW   r   r=   rU   r   )xr(   r(   r)   	normalise  s
   
z!_test_identity.<locals>.normalise)r   r.   r2   )r,   r    expectedmjobj2r   r(   r(   r)   _test_identity  s   

r   r#   c                  C  s  dd l } t}|dt |dt |d td  |d t |d t |dt |dtttf  tjd d dkr?|dttB  |d tttf  |dtttf  |dtttf  |dtttf  |dt	ttf  |dt
t  |dttd f  |d ttd f  tjd d dkr|dtd B  |g dtt  |g dtt dd	 |dtt  |dt	tttf  |g dtt  |dttttf  |d
ddtttf  |d ddttt
t f  |d
ddtttf  |g dttttf   tG dd d}||ddd| G dd dt}||ddd| tG dd d}|i tttf  ||ddg ddd| |g tt  |tdt |tdddd|ddd|d d!dtd"t gttt|f   td#td$}td#d$}||t|d	 dd l}|d%}td&d'}	td(d'}
||	}||
}||g}td)}td*}td+}||}||}|||g g ||	|
|
jtj d,}|D ]'}||t\}}t|t|ksJ ||v rt|j!t|j!ksJ q||td d-d%t"fksJ ||	td d.ksJ ||td d/d)t#fks*J ||td d0d)t#fks9J ||	$ t$d d1ksGJ G d2d3 d3}| j%td4d5 || gt|  W d    n	1 sjw   Y  |d6t	d6  d S )7Nr   r   aaar   r8   g       @)r   r   )r   r   r9   )r   aabb)rZ   b)1r   3c                   @     e Zd ZU ded< ded< dS )z-test_serialize_and_deserialize.<locals>.Pointintr   yNr   r(   r(   r(   r)   Point     
 r   )r   r   c                   @  r   )z*test_serialize_and_deserialize.<locals>.NTr   firstlastNr   r(   r(   r(   r)   NT  s   
 r   bbb)r   r   c                   @  s   e Zd ZU ded< ded< dS )z0test_serialize_and_deserialize.<locals>.WithJsonr   idzDict[str, Any]raw_dataNr   r(   r(   r(   r)   WithJson  r   r   {   whatever)rZ   r   c)payloadtags)r   r   z	whatever!Iam	exception      z
more stuffzI happenned onz2021-04-03T10:11:12zEurope/Londonz20200203 01:02:03z%Y%m%d %H:%M:%Sz20200803 01:02:03zAustralia/Sydneyz2025-04-05T15:01:00+00:00z2025-04-05T16:01:00+00:00)r   z2020-08-03T01:02:03+01:00)z2020-02-03T01:02:03NNz2025-04-06T02:01:00+11:00z2025-04-06T02:01:00+10:00z
2020-02-03c                   @  s   e Zd ZdS )z4test_serialize_and_deserialize.<locals>.NotSupportedN)r4   r5   r6   r(   r(   r(   r)   NotSupportedL  s    r   z*.*NotSupported.* isn't supported by cachew)matchr(   )&pytestr   r   r   r=   floatr   r   r   r   r   r   r   r   rj   r   r   r   r   r   rX   r   r   r   pytzr	   strptimelocalizer   r   extendreplaceutcr   r   r   r   raises)r   helperr   r   r   exc_with_datetimeexc_with_datetime_expr   	tz_londondwinterdsummer
dwinter_tz
dsummer_tzdates_tz	tz_sydneyutc_before_shiftutc_after__shiftsydney_beforesydney__afterdatesdr[   ddr   r(   r(   r)   test_serialize_and_deserialize  s   















r   r(   )r   r   )r"   r<   r$   )r"   r#   )F
__future__r   r   r   r   r   collectionsdataclassesr   r   r   r   r	   numbersr
   typingr   r   r   r   r   r   r   r   r   r   r   r   zoneinfor   utilsr   r   commonr   r   r   r   rB   r   r7   r<   rC   rG   rT   r_   ro   rw   rx   r   r   r=   r   boolr   r   r   r   ModuleNotFoundErrorr   r   
BaseTzInfor   r   r   r   r   r%   r   r   r(   r(   r(   r)   <module>   sz    8
&


	

b