a
    mJh                     @   s  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 ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ eege
eef f Zeeef ZG dd	 d	eZeeee	e d
f ZG dd dee Z h dZ!dZ"G dd dZ#ee  e dddZ$d
S )    )Enum)
CallablecastDictGenericListOptionalSequenceTupleUnionAny   )InnerConverterParserParserGetter
SerializerSerializerGetterT)	NameStyle)NameMapping)prepare_validatorsc                   @   s   e Zd ZdZdZdZdS )UnknownskipZforbidincludeN)__name__
__module____qualname__ZSKIPZFORBIDZSTORE r   r   J/var/www/shaz/venv/lib/python3.9/site-packages/dataclass_factory/schema.pyr      s   r   Nc                   @   s   e Zd ZU dZeee ee f e	d< eee ee f e	d< deee  eee  e
ee ee ee ee eee  eee  eee  eee  ee eee  eee  ee ee eee ee dddZdS )	Schemaz
    Class describing data conversion rules.
    See documentation for more details.

    In case of inheriting you can set any setting as a class field.
    Callable settings can be just methods.
    pre_validatorspost_validatorsN)onlyexcludename_mappingonly_mapped
name_styletrim_trailing_underscoreskip_internal
serializerget_serializerparser
get_parser	pre_parse
post_parsepre_serializepost_serializeomit_defaultunknownnamedescriptionc                 C   s  t | \| _| _|d us"t| ds(|| _|d us:t| ds@|| _|d usRt| dsX|| _|d usjt| dsp|| _|d ust| ds|| _|d ust| ds|| _	|d ust| ds|| _
|d ust| ds|| _|	d ust| d	s|	| _|
d ust| d
s|
| _|d ust| ds|| _|d us4t| ds:|| _|d usPt| dsV|| _|d uslt| dsr|| _|d ust| ds|| _|d ust| ds|| _|d ust| ds|| _|d ust| ds|| _|d ust| ds|| _d S )Nr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   )r   r    r!   hasattrr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   )selfr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r   r   r   __init__!   sN    zSchema.__init__)NNNNNNNNNNNNNNNNNNN)r   r   r   __doc__r   r   strr   r   __annotations__r   boolr   r   r   r   r   r   r   RuleForUnknownr7   r   r   r   r   r      sV   
                   







r   >   r!   r1   r3   r&   r4   r"   r    r)   r(   r-   r#   r0   r+   r'   r*   r/   r%   r,   r$   r2   r.   _schemas_patchc                       sF   e Zd ZeZedddZdd Z fddZdd	 Z	d
d Z
  ZS )SchemaProxyschemasc                 G   s   || _ i | _d S Nr=   )r6   rB   r   r   r   r7      s    zSchemaProxy.__init__c                 C   sh   z| j | W S  ty   Y n0 | jD ] }t||d }|d ur&|  S q&|tv rTd S td| dd S )NzField `z` is not defined for Schema)r?   KeyErrorr>   getattrSCHEMA_FIELDSAttributeError)r6   itemZschemaresr   r   r   __getattr__   s    

zSchemaProxy.__getattr__c                    s$   |t v rt ||S || j|< d S rC   )_SP_OWN_ATTRSsuper__setattr__r?   )r6   keyvalue	__class__r   r   rM      s    zSchemaProxy.__setattr__c                 C   s   | j | jfS rC   r=   )r6   r   r   r   __getstate__   s    zSchemaProxy.__getstate__c                 C   s   |\| _ | _d S rC   r=   )r6   stater   r   r   __setstate__   s    zSchemaProxy.__setstate__)r   r   r   rK   	__slots__r   r7   rJ   rM   rR   rT   __classcell__r   r   rP   r   r@      s   r@   )rB   returnc                  G   s   t ttdd | D  S )Nc                 S   s   g | ]}|r|qS r   r   ).0sr   r   r   
<listcomp>       z merge_schema.<locals>.<listcomp>)r   r   r@   rA   r   r   r   merge_schema   s    r\   )%enumr   typingr   r   r   r   r   r   r	   r
   r   r   commonr   r   r   r   r   r   Znamingr   Z
path_utilsr   
validatorsr   r9   r;   ZFieldMapperZSimpleFieldMappingr   r<   r   rF   rK   r@   r\   r   r   r   r   <module>   s   0 U#