a
    mJh                     @   s"  d dl 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mZmZmZmZmZ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mZ dd	lmZ dd
lm Z  edZ!eG dd dZ"eG dd de"Z#ee	dddZ$e j%e	dddZ&ee" dddZ'ee" dddZ(ee" dddZ)ee" dddZ*ee+dd d!Z,e
e	gee" f Z-e-ee! ee! ee# d"d#d$Z.ee+eeef f ee" d%d&d'Z/ee! ee! ee# d(d)d*Z0ee! ee! ee# d(d+d,Z1ee! ee! ee# d(d-d.Z2ee! ee! ee# d(d/d0Z3dS )1    N)	dataclassFieldfieldsMISSING)partial)	AnyCallablecastDictListSequenceTypeTypeVarUnion   )resolve_hintsresolve_init_hints)convert_name)CleanKey	CleanPathKeyPathreplace_ellipsis)Schema)is_generic_concreteTc                   @   s&   e Zd ZU eed< eed< eed< dS )BaseFieldInfo
field_nametypedefaultN)__name__
__module____qualname__str__annotations__r    r%   r%   J/var/www/shaz/venv/lib/python3.9/site-packages/dataclass_factory/fields.pyr      s   
r   c                   @   s   e Zd ZU eeef ed< dS )	FieldInfo	data_nameN)r    r!   r"   r   r   r   r$   r%   r%   r%   r&   r'      s   
r'   )fieldreturnc                 C   s   | j tkr|   S | jS N)default_factoryr   r   )r)   r%   r%   r&   get_dataclass_default   s    
r-   )	parameterr*   c                 C   s   | j tjju rtS | j S r+   )r   inspect	Parameteremptyr   )r.   r%   r%   r&   get_func_default"   s    r2   )r*   c                    s6   t | rt| j}nt| }t|   fdd|D S )Nc                    s,   g | ]$}|j rt|j |j t|d qS )r   r   r   )initr   namer-   .0fhintsr%   r&   
<listcomp>0   s   z(all_dataclass_fields.<locals>.<listcomp>)r   r   
__origin__r   cls
all_fieldsr%   r9   r&   all_dataclass_fields)   s    
r@   c                    s,   t | jj}t|   fdd| D S )Nc                    s*   g | ]"}t |j |jtt|d qS r3   )r   r5   getr   r2   r6   r9   r%   r&   r;   =   s   z$all_class_fields.<locals>.<listcomp>)r/   	signature__init__
parametersr   valuesr=   r%   r9   r&   all_class_fields:   s
    
rF   c                    s*   t | t| di   fdd| jD S )N_field_defaultsc              	      s*   g | ]"}t ||t |td qS r3   )r   rA   r   r   )r7   	fieldnamedefaultsr:   r%   r&   r;   K   s   

z)all_namedtuple_fields.<locals>.<listcomp>)r   getattr_fields)r>   r%   rI   r&   all_namedtuple_fieldsG   s
    rM   c                 C   s   t | }dd | D S )Nc                 S   s   g | ]\}}t ||td qS r3   )r   r   )r7   r8   tr%   r%   r&   r;   W   s   z(all_typeddict_fields.<locals>.<listcomp>)r   itemsr=   r%   r%   r&   all_typeddict_fieldsU   s    rP   schemar5   c                 C   s(   | j du s|| j v o&| jdu p&|| jvS )zyCheck if field is allowed by a schema.

    * field is in `only` list (if provided some)
    * field is not excluded
    N)onlyexcluderQ   r%   r%   r&   schema_fields_filter]   s    rU   )all_fields_getterrR   class_r*   c                    s   fdd| |D }j rVjd u rVjd u r8tddjv rJtdtj|S jrtjpfg tjprg B fdd|D }ttj	jj
d t fdd	|D S )
Nc                    s   g | ]}t  |jr|qS r%   )rU   r   )r7   r)   )rR   r%   r&   r;   q   s   zget_fields.<locals>.<listcomp>z1`name_mapping` is None, and `only_mapped` is True.z8`name_mapping` contains `...`, and `only_mapped` is Truec                    s&   g | ]}|j  v s|j d s|qS )_)r   
startswithr6   )whitelisted_fieldsr%   r&   r;      s   )
name_stylename_mappingtrim_trailing_underscorec                 3   s*   | ]"}t |j |j|j|jd V  qdS )r   r(   r   r   N)r'   r   r   r   r6   )convert_name_funcr%   r&   	<genexpr>   s   zget_fields.<locals>.<genexpr>)Zonly_mappedrS   r\   
ValueErrorget_only_mapped_fieldsZskip_internalsetr   r   r[   r]   tuple)rV   rR   rW   r?   r%   )r_   rR   rZ   r&   
get_fieldsl   s4    



re   r\   r?   c                    s(   dd |D  t  fdd|  D S )Nc                 S   s   i | ]}|j |qS r%   )r   r6   r%   r%   r&   
<dictcomp>       z*get_only_mapped_fields.<locals>.<dictcomp>c                 3   sB   | ]:\}}| v rt tt|t|| | j | jd V  qdS r^   )r'   r	   r#   r   r   r   )r7   r   r(   fields_dictr%   r&   r`      s   z)get_only_mapped_fields.<locals>.<genexpr>)rd   rO   rf   r%   ri   r&   rb      s    rb   )rR   rW   r*   c                 C   s   t t| |S r+   )re   r@   rR   rW   r%   r%   r&   get_dataclass_fields   s    rl   c                 C   s   t t| |S r+   )re   rM   rk   r%   r%   r&   get_namedtuple_fields   s    rm   c                 C   s   t t| |S r+   )re   rP   rk   r%   r%   r&   get_typeddict_fields   s    rn   c                 C   s   t t| |S r+   )re   rF   rk   r%   r%   r&   get_class_fields   s    ro   )4r/   dataclassesr   r   r   r   	functoolsr   typingr   r   r	   r
   r   r   r   r   r   Zgenericsr   r   Znamingr   Z
path_utilsr   r   r   r   r   rR   r   Ztype_detectionr   r   r   r'   r-   r0   r2   r@   rF   rM   rP   r#   rU   ZAllFieldsGetterre   rb   rl   rm   rn   ro   r%   r%   r%   r&   <module>   sB   ,-