a
    mJhC8                  
   @   sr  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	m
Z
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mZmZ ddlmZmZmZ ddl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- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? ddl@mAZA eBeCeDeEfZFeG ZHee eee dddZIee eeedddZJeedddZKeddddZLee ee dddZMeee eNeee  dddZOee edd d!ZPeQZRee eNee d"d#d$ZSee e)ee d%d&d'ZTee(e)f ee ee eee  ee(ee f d(d)d*ZUee eee  eNe+e
eeV ee f e
eeV ee f ee d+d,d-ZWeeee  eNeeVe+f e
eeV ee f e
eeV ee f ed+d.d/ZXee eee  d0d1d2ZYed3d4d5ZZed3d6d7Z[ee ed8d9d:Z\eed;d<d=Z]e,eNeed>d?d@Z^e,eNeed>dAdBZ_dS )C    N)deque)is_dataclass)AnyCallable
CollectionDequeDict	FrozenSetListOptionalSequenceSetTupleTypeUnionIterableMutableSequence
MutableSet
Reversible   )AbstractFactoryParserT)InvalidFieldErrorUnionParseErrorUnknownFieldsError)	FieldInfoget_class_fieldsget_dataclass_fieldsget_typeddict_fieldsget_namedtuple_fields)fix_generic_alias)CleanKey	CleanPath)RuleForUnknownSchemaUnknown)args_unspecifiedhasargsis_anyis_iterableis_dictis_enumis_generic_concrete
is_literalis_literal36
is_newtypeis_noneis_optionalis_tupleis_typeddictis_unionis_namedtuple
is_generic)combine_parser_validators)parserkeyreturnc                    s   t td fdd}|S )Ndatar;   c              
      sz   z
| W S  t y> } z|t   W Y d }~n@d }~0  tyt } z t t|t gW Y d }~n
d }~0 0 d S Nr   Z_append_pathstrPARSER_EXCEPTIONS)r=   er:   r9    K/var/www/shaz/venv/lib/python3.9/site-packages/dataclass_factory/parsers.pyelement_parser    s    
z*get_element_parser.<locals>.element_parser)r   r   )r9   r:   rF   rD   rC   rE   get_element_parser   s    	rG   )r9   r=   r:   r;   c              
   C   sz   z
| |W S  t y> } z|t|  W Y d }~n@d }~0  tyt } z t t|t|gW Y d }~n
d }~0 0 d S r>   r?   )r9   r=   r:   rB   rD   rD   rE   dyn_element_parser,   s    
rH   r<   c                 C   s   | S r>   rD   r=   rD   rD   rE   
parse_stub6   s    rJ   c                 C   s   | d urt dd S )NzNone expected)
ValueErrorrI   rD   rD   rE   
parse_none:   s    rL   )clsr;   c                    s    fdd}|S )Nc                    s   t |  r| S td  d S )Nzdata type is not %s)
isinstancerK   rI   rM   rD   rE   r9   @   s    
z%get_parser_with_check.<locals>.parserrD   )rM   r9   rD   rO   rE   get_parser_with_check?   s    rP   )collection_factoryitem_parser
debug_pathr;   c                    s&   |r fdd}n fdd}|S )Nc                    s    fddt | D S )Nc                 3   s   | ]\}}t  ||V  qd S r>   )rH   ).0ixrR   rD   rE   	<genexpr>O   s   Cget_collection_parser.<locals>.collection_parser.<locals>.<genexpr>	enumeraterI   rQ   rR   rD   rE   collection_parserN   s    z0get_collection_parser.<locals>.collection_parserc                    s    fdd| D S )Nc                 3   s   | ]} |V  qd S r>   rD   rT   rV   rW   rD   rE   rX   T   s   rY   rD   rI   r\   rD   rE   r]   S   s    rD   )rQ   rR   rS   r]   rD   r\   rE   get_collection_parserH   s    r_   )parsersr;   c                    s    fdd}|S )Nc                    sp   g } D ]T}z|| W   S  t yZ } z(||j|f W Y d }~qW Y d }~qd }~0 0 qtd|  |d S )Nz+No suitable parsers in union found for `%s`)rA   append__qualname__r   )r=   errorsprB   r`   rD   rE   union_parser[   s    $z&get_union_parser.<locals>.union_parserrD   )r`   rf   rD   re   rE   get_union_parserZ   s    
rg   )r`   rS   r;   c                    s&   |rdd t  D   fdd}|S )Nc                 S   s   g | ]\}}t ||qS rD   rG   )rT   rU   r9   rD   rD   rE   
<listcomp>m       z$get_tuple_parser.<locals>.<listcomp>c                    s@   t | t  kr(tdt  t | f tdd t|  D S )Nz-Incorrect length of data, expected %s, got %sc                 s   s   | ]\}}||V  qd S r>   rD   )rT   rV   r9   rD   rD   rE   rX   r   rj   z9get_tuple_parser.<locals>.tuple_parser.<locals>.<genexpr>)lenrK   tupleziprI   re   rD   rE   tuple_parsero   s    z&get_tuple_parser.<locals>.tuple_parserrZ   )r`   rS   rn   rD   re   rE   get_tuple_parserk   s    ro   )r9   pathr;   c                    s    fdd}|S )Nc              	      sV   | d u r | S z"D ]}| | } | d u r q0qW n t tfyL   t Y S 0  | S r>   )KeyError
IndexErrorMISSED)r=   rV   r9   rp   rD   rE   path_parserx   s    

z$get_path_parser.<locals>.path_parserrD   )r9   rp   ru   rD   rt   rE   get_path_parserw   s    rv   )itemr9   pre_validatorspost_validatorsr;   c                 C   sT   t |||}t| trHt| dkr.| d |fS | d t|| dd  fS | |fS d S )Nr   r   )r8   rN   rl   rk   rv   rw   r9   rx   ry   rD   rD   rE   get_field_parser   s    
r{   )class_factoryfieldsrS   unknownrx   ry   r;   c           	         s   t fdd|D tdd D }|rBt dd D |rj	tjkrZtd	 fdd}nxddd	tju rd	n6	tju rd	n&	tju rnt	trd		g	nd	d
d |D  	fdd}|S )Nc                 3   s^   | ]V}|j gt|j |j|j g d g  |j g d g  dR V  qd S )Nrz   )
field_namer{   	data_namer9   typegetrT   f)r}   ry   rx   rD   rE   rX      s   

z%get_complex_parser.<locals>.<genexpr>c                 s   s   | ]\}}}t |tV  qd S r>   )rN   int)rT   _namerD   rD   rE   rX      rj   c                 s   s$   | ]\}}}||t ||fV  qd S r>   rh   )rT   r   r   r9   rD   rD   rE   rX      s   z)Cannot use unknown=`%s` when parsing listc                    s&   t  f i  fddD S )Nc                    s(   i | ] \}}}| k r||| qS rD   rD   )rT   r   Zitem_idxr9   countr=   rD   rE   
<dictcomp>   s   >get_complex_parser.<locals>.complex_parser.<locals>.<dictcomp>)rk   rI   )r|   
field_infor   rE   complex_parser   s    z*get_complex_parser.<locals>.complex_parserFTc                 S   s   h | ]
}|j qS rD   )r   r   rD   rD   rE   	<setcomp>   rj   z%get_complex_parser.<locals>.<setcomp>c           
         s   r, | s,t|  }td  |nRr^fdd|  D }D ]}|| |< qJi }n rzfdd|  D }ni }i }D ].\}}}|| v r|| | }	|	tur|	||< q f i ||S )NzCannot parse c                    s   i | ]\}}| vr||qS rD   rD   rT   kvknown_fieldsrD   rE   r      rj   r   c                    s   i | ]\}}| vr||qS rD   rD   r   r   rD   rE   r      rj   )
issupersetsetr   itemsrs   )
r=   Zunknown_field_namesextrasfieldZunknown_fieldsr~   r   Z	item_namer9   result)r|   r   forbid_unknownr   store_unknownstore_unknown_separater   rD   rE   r      s,    

)	rl   anyr&   ZSKIPrK   ZFORBIDZSTORErN   r@   )	r|   r}   r~   rS   r   rx   ry   Z	list_moder   rD   )
r|   r}   r   r   r   ry   rx   r   r   r   rE   get_complex_parser   s8    






r   c                    s@   t  ||||||dd |D  jr< fdd}|S S )Nc                 S   s   h | ]
}|j qS rD   )r   r   rD   rD   rE   r      rj   z(get_typed_dict_parser.<locals>.<setcomp>c                    s$   | }t |ks td  |S )NzNot all fields provided for %s)r   rK   )r=   resr|   r   Zrequires_fieldsrD   rE   total_parser   s    z+get_typed_dict_parser.<locals>.total_parser)r   	__total__)r|   r}   r~   rS   r   rx   ry   r   rD   r   rE   get_typed_dict_parser   s    	r   )r9   r;   c                    s    fdd}|S )Nc                    s   | d ur | S d S r>   rD   rI   r9   rD   rE   optional_parser  s    z,get_optional_parser.<locals>.optional_parserrD   )r9   r   rD   r   rE   get_optional_parser  s    r   )r;   c              *   C   s   t | r| jp| }n| }ttttttttttttttt	t
t
t
tttttttttttjjttjjttjjttjjttjjttjjttjjti|}|std|  |S )NzClass %s not supported)r-   
__origin__r
   listr   r   r   r	   	frozensetr   r   r   r   r   r   r   collectionsabcr   NotImplementedError)rM   originr   rD   rD   rE   get_collection_factory	  s<    r   c                    s    fddS )Nc                    s    fdd|   D S )Nc                    s   i | ]\}} ||qS rD   rD   r   Z
key_parserZvalue_parserrD   rE   r   +  rj   z5get_dict_parser.<locals>.<lambda>.<locals>.<dictcomp>)r   rI   r   rD   rE   <lambda>+  rj   z!get_dict_parser.<locals>.<lambda>rD   r   rD   r   rE   get_dict_parser*  s    r   )valuesr;   c                    s   t d fdd}|S )NrI   c                    s>    D ]$}t ||ft | | fkr|   S qtdt|  d S )NzInvalid literal %s)r   rK   repr)r=   r   r   rD   rE   literal_parser/  s    
z*get_literal_parser.<locals>.literal_parser)r   )r}   r   r   rD   r   rE   get_literal_parser.  s    r   )r|   r;   c                    s    fdd}|S )Nc                    s    |  S r>   )loadrI   r|   r}   rD   rE   lazy_parser9  s    z$get_lazy_parser.<locals>.lazy_parserrD   )r}   r|   r   rD   r   rE   get_lazy_parser8  s    r   )schemarS   rM   r;   c                    s:   t | ||| |j|js"r6 fdd}|S  S )Nc                    s$   r| }  | } r | S | S r>   rD   rI   r9   postprerD   rE   parser_with_stepsD  s    z(create_parser.<locals>.parser_with_steps)create_parser_implZ	pre_parseZ
post_parse)r}   r   rS   rM   r   rD   r   rE   create_parser?  s    r   c           
   	      s  t |}t|rtS t|r tS t|r4t |jS t|rHt |j	S t
|rdt |jd S |tttfv rzt|S |ttttfv r|S t|rt |||jS t|r|S t|rt| t||||j|j|jdS t|rLt |st!S t"|jdkr.|jd t#u r. |jd }t$t%||S t&t% fdd|jD |S t'|rt(|rjt)}t)}n|jd }|jd }t* | |S t+|st,|rt+|j-rt.| t/||||j|j|jdS t0|st,|rt0|j-rt| t1||||j|j|jdS t2|rZt(|r2t)}n
|jd }t3|} |}t$|||S t4|rt% fdd|jD }t"|dkrtS t"|dkr|d }	nt5|}	t"|t"|jk rt|	S |	S z$t| t6||||j|j|jdW S  t7y   t8d	t9| Y n0 d S )
Nr   )r|   r}   r~   rS   r   rx   ry      r   c                 3   s   | ]}  |V  qd S r>   r   r^   r}   rD   rE   rX   u  rj   z%create_parser_impl.<locals>.<genexpr>)r   rx   ry   c                 3   s    | ]}t |s |V  qd S r>   )r1   r9   r^   r   rD   rE   rX     rj   zCannot find parser for `%s`):r!   r)   rJ   r1   rL   r.   r   __args__r/   Z
__values__r2   r   r9   r@   	bytearraybytesrP   r   floatcomplexboolr0   r   __supertype__r,   r6   r   r    r   rx   ry   r3   r(   tuple_any_parserrk   Ellipsisr_   rl   ro   r+   r'   r   r   r4   r-   r   r   r   r   r   r*   r   r5   rg   r   rA   rK   r   )
r}   r   rS   rM   rR   Zkey_type_argZvalue_type_argrQ   r`   r9   rD   r   rE   r   P  s    	
 



 	 	





	r   )`collections.abcr   r   dataclassesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   commonr   r   r   
exceptionsr   r   r   r~   r   r   r   r   r    Zgenericsr!   Z
path_utilsr"   r#   r   r$   r%   r&   Ztype_detectionr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   
validatorsr8   rK   	TypeErrorAttributeErrorLookupErrorrA   objectrs   rG   rH   rJ   rL   rP   r   r_   rg   rl   r   ro   rv   r{   r@   r   r   r   r   r   r   r   r   r   rD   rD   rD   rE   <module>   st   LL




U
!
