o
    !2g$                  	   @   s  U d dl 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 d dl	m
Z
mZmZ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mZmZ ed ZddgZee ed< dddedededdfddZeG dd dZej !deej !dg dej j!dddgddgddededdfddZ"ej !deej !dg dej j!dddgddgddededdfd d!Z#ej !deej !dd"d#gej j!dddgddgddededdfd$d%Z$dS )&    N)	dataclass)datetimetimezone)Path)AnyListLiteralUnion   )CachewMarshall)Json   )
gc_controlprofilerunning_on_citimer)cachewcattrslegacyr   r   Impls)impl	test_namecountr   returnc              
      sJ  |dkrt rtd |dkrt d}|j}|j}nP|dkr1ddlm} | }	|	j	}|	j
}n:|dkrgd	d
lm}
 d	dlm} |
 d	dlm fdd}j }j |} fdd}nt|ttjd t| d ) td| d   t||d}W d    n1 sw   Y  W d    n1 sw   Y  dd t|D }t| d 1 td| d   t|D ]
}||| ||< qW d    n1 sw   Y  W d    n1 sw   Y  dd t|D }t| d 4 td| d   t|D ]}t|| ||< qW d    n	1 s'w   Y  W d    n	1 s7w   Y  td}|j  rLt!"|j |j#  t| d M td| d  2 t$%|}|&d  |'d!d"d |D  W d    n	1 sw   Y  |(  W d    n	1 sw   Y  W d    n	1 sw   Y  d#d t|D }t| d$ Q td%| d  6 t$%|}d	}|&d&D ]\}|||< |d'7 }qW d    n	1 sw   Y  |(  W d    n	1 sw   Y  W d    n	1 sw   Y  |jd( }t| d) F td*| d  + |)d+}|D ]
}|*|d,  q5W d    n	1 sKw   Y  W d    n	1 s[w   Y  W d    n	1 skw   Y  d-d t|D }t| d. N td/| d  3 d	}|)d0}|D ]}|+d,}|||< |d'7 }qW d    n	1 sw   Y  W d    n	1 sw   Y  W d    n	1 sw   Y  |d d |d1d   |d d |d1d   ksJ d2d t|D }t| d3 4 td4| d   t|D ]}t,|| ||< qW d    n	1 s(w   Y  W d    n	1 s8w   Y  d5d t|D }t| d6 3 td7| d   t|D ]}||| ||< q\W d    n	1 ssw   Y  W d    n	1 sw   Y  |d d |d1d   |d d |d1d   ksJ d S )8Nd   z1test too heavy for CI, only meant to run manuallyr   )Type_r   r
   )NTBinderr   r   )	Converter)configure_tagged_union)get_argsc                    s    fdd}|S )Nc              	      sZ   |}| d u r
d S |D ]}z  | |}W |  S  ty"   Y qw td|  d| )NzCould not cast z to )	structure	Exception
ValueError)datatype_argstres	converterr    M/home/garg/my-data/venv/lib/python3.10/site-packages/cachew/tests/marshall.py
union_hookI   s   zAdo_test.<locals>.union_structure_hook_factory.<locals>.union_hookr*   )_r,   r(   r*   r+   union_structure_hook_factoryH   s   z-do_test.<locals>.union_structure_hook_factoryc                    s
   |  S Nr*   )x)Typestruct_funcr*   r+   <lambda>j   s   
 zdo_test.<locals>.<lambda>)filez	:baselinezbuilding      z objects of type )r   c                 S      g | ]}d qS r/   r*   .0r-   r*   r*   r+   
<listcomp>s       zdo_test.<locals>.<listcomp>z
:serializezserializing   c                 S   r5   r/   r*   r6   r*   r*   r+   r8   x   r9   z
:json_dumpzjson dump     z/tmp/cachew_test/db.sqlitez:sqlite_dumpzsqlite dump   zCREATE TABLE data (value BLOB)z#INSERT INTO data (value) VALUES (?)c                 S   s   g | ]}|fqS r*   r*   )r7   sr*   r*   r+   r8      s    c                 S   r5   r/   r*   r6   r*   r*   r+   r8      r9   z:sqlite_loadzsqlite load   zSELECT value FROM datar   zcache.jsonlz:jsonl_dumpzjsonl dump    wb   
c                 S   r5   r/   r*   r6   r*   r*   r+   r8      r9   z:jsonl_loadzjsonl load    rbic                 S   r5   r/   r*   r6   r*   r*   r+   r8      r9   z
:json_loadzjson load     c                 S   r5   r/   r*   r6   r*   r*   r+   r8      r9   z:deserializezdeserializing )-r   pytestskipr   dumploadr   r   maketo_rowfrom_rowr   r   cattrs.strategiesr   typingr   _unstructure_funcdispatch_structure_funcRuntimeErrorprintsysstderrr   r   listrangeorjsondumpsr   parentexistsshutilrmtreemkdirsqlite3connectexecuteexecutemanycloseopenwriterstriploads)r   r1   factoryr   r   marshallto_json	from_jsonr   binderr   r   r.   unstruct_funcobjectsjsonsistrsdbconnstrs2valuecachefwr:   strs3frljsons2objects2r*   )r1   r)   r   r2   r+   do_test#   s   


	$ $ $ 
$

 $
 
$ $
 6$ $ :ru   c                   @      e Zd ZU eed< eed< dS )NamefirstlastN)__name__
__module____qualname__str__annotations__r*   r*   r*   r+   rw         
 rw   )c   @B i@KL gc_onTFgc_off)idsc                 C   sB   | dkr	t d dtfdd}t|jjtttf ||| d d S )Nr   z1TODO need to adjust the handling of Union types..r   c                 S   sP   g }t | D ]}|d dkr|t| q|td| d| d q|S )Nr
   r   zfirst zlast )rx   ry   )rO   appendr}   rw   )r   rf   rh   r*   r*   r+   r`      s    z)test_union_str_dataclass.<locals>.factoryr   r1   r`   r   r   )	r>   r?   intru   nodenamer	   r}   rw   r   r   r   requestr`   r*   r*   r+   test_union_str_dataclass   s   
"	r   c                    sF   | dkr	t d dd l dtf fdd}t|jjt||| d d S )Nr   z*TODO support datetime with pytz for cattrsr   r   c                 3   sv      dt j  dg}td}td}|| |  }t| D ]}|||  }||t|  }|j|dV  q!d S )NzEurope/BerlinzAmerica/New_Yorkz1990-01-01T00:00:00z2030-01-01T00:00:00)tzinfo)r   utcr   fromisoformatrO   lenreplace)r   tzsstartendsteprh   dttzpytzr*   r+   r`      s   

ztest_datetimes.<locals>.factoryr   )r>   r?   r   r   ru   r   r   r   r   r*   r   r+   test_datetimes   s
   
r   r   r   c                    sV   t G dd dt G fddd dtf fdd}t|jj ||| d d S )	Nc                   @   rv   )z"test_nested_dataclass.<locals>.UUUxxyyNrz   r{   r|   r   r~   r*   r*   r*   r+   UUU   r   r   c                       s&   e Zd ZU eed<  ed< eed< dS )z"test_nested_dataclass.<locals>.TE2rm   uuuvalue2Nr   r*   )r   r*   r+   TE2   s   
 r   r   c                 3   s,    t | D ]} |||d|dV  qd S )N)r   r   )rm   r   r   )rO   )r   rh   r   r   r*   r+   r`      s   z&test_nested_dataclass.<locals>.factoryr   )r   r   ru   r   r   r   r*   r   r+   test_nested_dataclass   s   r   )%rT   rW   rL   dataclassesr   r   r   pathlibr   rF   r   r   r   r	   rP   r>   marshall.cachewr   marshall.commonr   utilsr   r   r   r   Implr   r~   r}   r   ru   rw   markparametrizer   r   r   r*   r*   r*   r+   <module>   s@   
    