a
    mJh'                     @   sB  d dl mZmZ d dlmZmZ d dlmZmZ d dl	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mZ ddlmZmZmZmZ ddlmZ dd	lmZm Z m!Z! dd
l"m#Z#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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 eee f e dddZ7dd Z8ee#e ee ee
e
ge
f e9ee dddZ:ee eee  dddZ;ee dddZ<eee
  dddZ=edddZ>e
ddd d!Z?eedd"d#Z@ee ee eee
e
f  d$d%d&ZAedd'd(ZBee eee  dd)d*ZCe#e9eed+d,d-ZDe#e9eed+d.d/ZEdS )0    )is_dataclassMISSING)dumpsloads)
attrgettergetitem)AnyCallableDictListOptionalSequenceTypeUnion   )AbstractFactoryK
SerializerT)	FieldInfoget_dataclass_fieldsget_typeddict_fieldsget_namedtuple_fields)fix_generic_alias)CleanKey	CleanPathinit_structure)SchemaUnknown)hasargsis_anyis_iterableis_dictis_enumis_generic_concrete
is_newtypeis_optionalis_tupleis_type_varis_typeddictis_union
is_literalis_literal36instance_wont_have_dictis_noneis_namedtuple)keyreturnc                 C   s   t | tr| S | fS N
isinstancetuple)r0    r6   O/var/www/shaz/venv/lib/python3.9/site-packages/dataclass_factory/serializers.pyto_path   s    
r8   c                 C   s    |D ]}|  | |i  qd S r2   )updatepop)destfieldsfr6   r6   r7   unpack_fields   s    r>   )factoryschemar<   getteromit_missingr1   c                    s  |j otdd |D }|r2|p0tdd |D }t fdd|D |jttr^dnttrtdgnd|jrtdd |j	 D rtdd |D }t
t||r|j rtd	ntd
fdd}n*|rfdd}nfdd}|S )z
    :param getter: functions used to get data for each field (attribute, key and so on)
    :param omit_missing: omit special MISSING values retrieved from getter. Is applied when all defaults are MISSING.
    c                 s   s   | ]}|j tkV  qd S r2   defaultr   .0r=   r6   r6   r7   	<genexpr>+       z)get_complex_serializer.<locals>.<genexpr>c                 s   s   | ]}|j tkV  qd S r2   rC   rE   r6   r6   r7   rG   -   rH   c                 3   s(   | ] }|j  |j|j|jfV  qd S r2   )
field_name
serializertype	data_namerD   rE   r?   r6   r7   rG   .   s   FTc                 s   s   | ]}t |tV  qd S r2   r3   )rF   r0   r6   r6   r7   rG   ;   rH   c                 s   s   | ]}t |jV  qd S r2   )r8   rL   rE   r6   r6   r7   rG   <   rH   z7Cannot use `omit_default` option with flattening schemaz1Cannot omit missing values with flattening schemac                    sN   t \}}t| D ]$\\}}^}}}|| |||< qrJt| |S r2   )r   zipr>   )data	containerZfield_containersZinner_containerrL   rI   rJ   _)
field_inforA   pickledunknownunpack_unknownr6   r7   	serializeD   s    
z)get_complex_serializer.<locals>.serializec                    s&    fddD }r"t | |S )Nc                    s0   i | ](\}}}}| |}||kr||qS r6   r6   )rF   rI   rJ   rL   rD   valuerO   rA   r6   r7   
<dictcomp>P   s   
=get_complex_serializer.<locals>.serialize.<locals>.<dictcomp>r>   rO   rP   rR   rA   rT   rU   rO   r7   rV   O   s    
c                    s&    fddD }r"t | |S )Nc                    s$   i | ]\}}}}|| |qS r6   r6   )rF   rI   rJ   rL   rD   rX   r6   r7   rY   \   s   
rZ   r[   r\   r]   r^   r7   rV   [   s    
)Zomit_defaultanyallr5   rT   r4   r   strZname_mappingvaluesr   r   
ValueError)r?   r@   r<   rA   rB   has_defaultpathsrV   r6   )r?   rR   rA   rS   rT   rU   r7   get_complex_serializer    s2    



rf   )rJ   r1   c                    s    fdd}|S )Nc                    s    fdd| D S )Nc                    s   g | ]} |qS r6   r6   rF   xrJ   r6   r7   
<listcomp>h   rH   zLget_collection_serializer.<locals>.collection_serializer.<locals>.<listcomp>r6   r^   ri   r6   r7   collection_serializerg   s    z8get_collection_serializer.<locals>.collection_serializerr6   )rJ   rk   r6   ri   r7   get_collection_serializerf   s    rl   )r1   c                    s    fdd}|S )Nc                    s   dd t |  D S )Nc                 S   s   g | ]\}}||qS r6   r6   )rF   rh   rJ   r6   r6   r7   rj   o   rH   zBget_tuple_serializer.<locals>.tuple_serializer.<locals>.<listcomp>)rN   r^   serializersr6   r7   tuple_serializern   s    z.get_tuple_serializer.<locals>.tuple_serializerr6   )rn   ro   r6   rm   r7   get_tuple_serializerm   s    rp   c                   C   s   dd S )Nc                 S   s   t | S r2   )listr^   r6   r6   r7   <lambda>u   rH   z/get_collection_any_serializer.<locals>.<lambda>r6   r6   r6   r6   r7   get_collection_any_serializert   s    rs   c                    s   t |  td fdd}|S )Nr^   c                    s    fddt |  D S )Nc                    s   i | ]\}}| |qS r6   r6   rF   kvZfield_serializerr6   r7   rY   |   s   z@get_vars_serializer.<locals>.vars_serializer.<locals>.<dictcomp>)varsitemsr^   rw   r6   r7   vars_serializer{   s    

z,get_vars_serializer.<locals>.vars_serializer)get_lazy_serializerr   )r?   rz   r6   rw   r7   get_vars_serializerx   s    r|   N)rO   r1   c                 C   s   | d urt dd S )NzNone expected)rc   r^   r6   r6   r7   serialize_none   s    r}   c                 C   s   | S r2   r6   r^   r6   r6   r7   stub_serializer   s    r~   )key_serializerrJ   r1   c                    s    fddS )Nc                    s    fdd|   D S )Nc                    s   i | ]\}} ||qS r6   r6   rt   r   rJ   r6   r7   rY      s   z9get_dict_serializer.<locals>.<lambda>.<locals>.<dictcomp>)ry   r^   r   r6   r7   rr      s   z%get_dict_serializer.<locals>.<lambda>r6   r   r6   r   r7   get_dict_serializer   s    r   c                    s    fdd}|S )Nc                    s     t| | S r2   )rJ   rK   r^   rM   r6   r7   lazy_serializer   s    z,get_lazy_serializer.<locals>.lazy_serializerr6   )r?   r   r6   rM   r7   r{      s    r{   c                    s    fdd}|S )Nc                    s   | d u rd S  | S d S r2   r6   r^   ri   r6   r7   optional_serializer   s    z4get_optional_serializer.<locals>.optional_serializerr6   )rJ   r   r6   ri   r7   get_optional_serializer   s    r   )r@   
debug_pathclass_r1   c                    s:   t | ||||j|j s" r6 fdd}|S S )Nc                    s$   r| } | }  r  | S | S r2   r6   r^   postprerJ   r6   r7   serializer_with_steps   s    z0create_serializer.<locals>.serializer_with_steps)create_serializer_implZpre_serializeZpost_serialize)r?   r@   r   r   r   r6   r   r7   create_serializer   s    r   c           	         sz  t |}|tttttttfv r"tS t	|r.t
S t|sFt|sFt	|rJtS t|rbt |||jS t|rrt S t|st|rt|jrt |t||tdS t|rt |t||tdS t|st|rt|jr|jrt |t||tdS t |t||dd dS t|r&t S |tttttttfv rB|S t|rj|j rbt!|j d S t S t"|r|t#dS t$|rt% fdd|j D }t&|dkrt
S t&|d	kr|d }nt }t&|t&|j k rt!|S |S t'|r^t(|s
t) S t&|j d
krB|j d	 t*u rB +|j d }t,|S t-t% fdd|j D S t|rt.|jr|j r|j d nt/}|j r|j d	 nt/}t0 +| +|S t.|rt0t t S t|rt1|jr +|j r|j d nt/}t,|S t1|r&t }t,|S t2|t3rrt4|rJt5d| t6|drrd|j7v rrt5d| dt8 S )NFc                 S   s   |  |tS r2   )getr   )objr0   r6   r6   r7   rr      rH   z(create_serializer_impl.<locals>.<lambda>Tr   rW   c                 3   s    | ]}t |s |V  qd S r2   )r.   rJ   rg   rM   r6   r7   rG      rH   z)create_serializer_impl.<locals>.<genexpr>r      c                 3   s   | ]}  |V  qd S r2   ri   rg   rM   r6   r7   rG     rH   zCan not create serializer for 	__slots____dict__z# that has __dict__ inside __slots__)9r   ra   	bytearraybytesintfloatcomplexboolr~   r.   r}   r+   r,   r%   r   __supertype__r(   r{   r   r$   
__origin__rf   r   getattrr/   r   r)   	__total__r   r   r    r&   __args__r   r#   r   r*   r5   lenr'   r   rs   EllipsisrJ   rl   rp   r"   r   r   r!   r4   rK   r-   rc   hasattrr   r|   )	r?   r@   r   r   rn   rJ   Zitem_serializerZkey_type_argZvalue_type_argr6   rM   r7   r      s    






 




r   )Fdataclassesr   r   marshalr   r   operatorr   r   typingr   r	   r
   r   r   r   r   r   commonr   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'   r(   r)   r*   r+   r,   r-   r.   r/   r8   r>   r   rf   rl   rp   rs   r|   r}   r~   r   r{   r   r   r   r6   r6   r6   r7   <module>   sB   (LF
