o
    *if(                     @   s
  d dl Z d dlZd dlZd dlZd dl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 d dlmZ d dlmZ e
eef Ze
eef ZG dd de jZG d	d
 d
eZee ZG dd deZG dd deZG dd deZG dd deZ dS )    N)Fieldfields)AnyCallableDictOptionalTupleUnionTypeget_type_hints)Enum)ValidationError)CatchAllVarc                   @   s   e Zd Zeejdeeef deeef fddZ	edeeef deeef fddZ
edeeef fddZedefd	d
Zededeeef fddZdS )_UndefinedParameterActionkvsreturnc                 C   s   dS )zE
        Return the parameters to initialize the class with.
        N clsr   r   r   S/var/www/html/corbot_env/lib/python3.10/site-packages/dataclasses_json/undefined.pyhandle_from_dict   s   z*_UndefinedParameterAction.handle_from_dictc                 C   s   |S )zO
        Return the parameters that will be written to the output dict
        r   )objr   r   r   r   handle_to_dict      z(_UndefinedParameterAction.handle_to_dictc                 C   s   i S )zN
        Return the parameters that will be added to the schema dump.
        r   r   r   r   r   handle_dump"   r   z%_UndefinedParameterAction.handle_dumpc                 C   s   | j S N)__init__r   r   r   r   create_init)   s   z%_UndefinedParameterAction.create_initc                    sJ   t | }dd |D   fdd| D } fdd| D }||fS )zL
        Returns a 2 dictionaries: defined and undefined parameters
        c                 S   s   g | ]}|j qS r   )name).0fieldr   r   r   
<listcomp>4       zM_UndefinedParameterAction._separate_defined_undefined_kvs.<locals>.<listcomp>c                    s   i | ]\}}| vr||qS r   r   r    kvfield_namesr   r   
<dictcomp>5       zM_UndefinedParameterAction._separate_defined_undefined_kvs.<locals>.<dictcomp>c                    s   i | ]\}}| v r||qS r   r   r$   r'   r   r   r)   7   r*   )r   items)r   r   class_fieldsunknown_given_parametersknown_given_parametersr   r'   r   _separate_defined_undefined_kvs-   s
   z9_UndefinedParameterAction._separate_defined_undefined_kvsN)__name__
__module____qualname__staticmethodabcabstractmethodr   r   strr   r   r   r   r   r   KnownParametersUnknownParametersr/   r   r   r   r   r      s    &$
r   c                   @   s.   e Zd ZdZededeeef fddZdS )_RaiseUndefinedParameterszw
    This action raises UndefinedParameterError if it encounters an undefined
    parameter during initialization.
    r   r   c                 C   s0   t j| |d\}}t|dkrtd| |S )Nr   r   z,Received undefined initialization arguments )r   r/   lenUndefinedParameterError)r   r   knownunknownr   r   r   r   B   s   z*_RaiseUndefinedParameters.handle_from_dictN)	r0   r1   r2   __doc__r3   r   r6   r   r   r   r   r   r   r9   <   s     r9   c                   @   s@   e Zd ZdZededeeef fddZede	fddZ
dS )	_IgnoreUndefinedParametersz
    This action does nothing when it encounters undefined parameters.
    The undefined parameters can not be retrieved after the class has been
    created.
    r   r   c                 C   s   t j| |d\}}|S )Nr   )r   r/   )r   r   r.   _r   r   r   r   W   s
   z+_IgnoreUndefinedParameters.handle_from_dictc                    0   j t tj  fdd}|S )Nc           
         s   t |\}}t jd }|t| }|d | } j| g|R i |}|  |j}|dd  t	|}	| fi |	 d S )N   self)
_CatchAllUndefinedParametersr/   r:   
parametersbind_partialapply_defaults	argumentspopr?   r   )
rC   argskwargsknown_kwargsr@   num_params_takeablenum_args_takeablebound_parametersrH   final_parametersinit_signaturer   original_initr   r   _ignore_initc   s(   
z<_IgnoreUndefinedParameters.create_init.<locals>._ignore_initr   inspect	signature	functoolswraps)r   rT   r   rQ   r   r   ^   s
   

z&_IgnoreUndefinedParameters.create_initN)r0   r1   r2   r>   r3   r   r6   r   r   r   r   r   r   r   r   r?   P   s    r?   c                   @   s   e Zd ZdZG dd dZededeeef fddZ	ede
defd	d
Zedeeef deeef fddZedeeef fddZedefddZede
fddZdS )rD   a  
    This class allows to add a field of type utils.CatchAll which acts as a
    dictionary into which all
    undefined parameters will be written.
    These parameters are not affected by LetterCase.
    If no undefined parameters are given, this dictionary will be empty.
    c                   @   s   e Zd ZdS )z/_CatchAllUndefinedParameters._SentinelNoDefaultN)r0   r1   r2   r   r   r   r   _SentinelNoDefault   s    rZ   r   r   c           
      C   s   t j| |d\}}tj| d}|j|v rct||j t}tj|d}|||j k}|r4t|dkr4|}n1|r?t|dkr?|}n&|rR||j }t|dkrQ|	| nd|j d||j  d}	t
|	|}|||j< |S )Nr   r   )catch_all_fieldr   z9Received input field with same name as catch-all field: 'z': '')r   r/   rD   _get_catch_all_fieldr   
isinstancedict_get_defaultr:   updater;   )
r   r   r<   r=   r\   already_parseddefault_valuereceived_defaultvalue_to_writeerror_messager   r   r   r      s<   




z-_CatchAllUndefinedParameters.handle_from_dictr\   c                 C   sD   t | jtj }t | jtj }tj}|r| j}|S |r |  }|S r   )r_   defaultdataclasses_MISSING_TYPEdefault_factoryrD   rZ   )r\   has_defaulthas_default_factoryrd   r   r   r   ra      s   z)_CatchAllUndefinedParameters._get_defaultc                 C   s0   t | j}||j}t|tr|| |S r   )rD   r^   	__class__rI   r   r_   r`   rb   )r   r   r\   undefined_parametersr   r   r   r      s   

z+_CatchAllUndefinedParameters.handle_to_dictc                 C   s   t j| d}t| |jS )Nr[   )rD   r^   getattrr   )r   r\   r   r   r   r      s   z(_CatchAllUndefinedParameters.handle_dumpc                    rA   )Nc                    s   t |\}}t jd }t j|vr|d8 }|t| }|d | ||d  }} j| g|R i |}dd t|D }|j}	|		| |		| |	
dd  t |	}
| fi |
 d S )NrB   c                 S   s   i | ]
\}}d | |qS )_UNKNOWNr   )r    ir&   r   r   r   r)      s    zU_CatchAllUndefinedParameters.create_init.<locals>._catch_all_init.<locals>.<dictcomp>rC   )rD   r/   r:   rE   r^   r   rF   	enumeraterH   rb   rI   r   )rC   rJ   rK   rL   unknown_kwargsrM   rN   unknown_argsrO   rH   rP   rQ   r   r   _catch_all_init   sB   

zA_CatchAllUndefinedParameters.create_init.<locals>._catch_all_initrU   )r   rv   r   rQ   r   r      s
   

z(_CatchAllUndefinedParameters.create_initc                    sn   t tj| j }t| |d tt fddt| }t|}|dkr't	d|dkr3t	d| d|d S )	N)globalnsc                    s    | j  tt kS r   )r   r   r   )ftypesr   r   <lambda>   r#   zC_CatchAllUndefinedParameters._get_catch_all_field.<locals>.<lambda>r   z2No field of type dataclasses_json.CatchAll definedrB   z$Multiple catch-all fields supplied: .)
varssysmodulesr1   r   listfilterr   r:   r;   )r   cls_globalscatch_all_fieldsnumber_of_catch_all_fieldsr   ry   r   r^      s"   z1_CatchAllUndefinedParameters._get_catch_all_fieldN)r0   r1   r2   r>   rZ   r3   r   r6   r   r   r   ra   r   r   r   r   r^   r   r   r   r   rD   z   s    #$	!rD   c                   @   s   e Zd ZdZeZeZeZ	dS )	Undefinedzv
    Choose the behavior what happens when an undefined parameter is encountered
    during class initialization.
    N)
r0   r1   r2   r>   rD   INCLUDEr9   RAISEr?   EXCLUDEr   r   r   r   r   
  s
    r   c                   @   s   e Zd ZdZdS )r;   zM
    Raised when something has gone wrong handling undefined parameters.
    N)r0   r1   r2   r>   r   r   r   r   r;     s    r;   )!r4   ri   rX   rV   r~   r   r   typingr   r   r   r   r   r	   r
   r   enumr   marshmallow.exceptionsr   dataclasses_json.utilsr   r6   r7   r8   ABCr   r9   CatchAllr?   rD   r   r;   r   r   r   r   <module>   s(    (** 
