o
    DZh(                     @   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   Q/var/www/html/lang_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   Zclass_fieldsZ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)	r.   r/   r0   __doc__r1   r   r4   r   r   r   r   r   r   r7   <   s     r7   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-   r8   
parametersbind_partialapply_defaults	argumentspopr=   r   )
rA   argskwargsknown_kwargsr>   num_params_takeablenum_args_takeablebound_parametersrF   final_parametersZinit_signaturer   Zoriginal_initr   r   _ignore_initc   s(   
z<_IgnoreUndefinedParameters.create_init.<locals>._ignore_initr   inspect	signature	functoolswraps)r   rP   r   rO   r   r   ^   s
   

z&_IgnoreUndefinedParameters.create_initN)r.   r/   r0   r<   r1   r   r4   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 )rB   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)r.   r/   r0   r   r   r   r   _SentinelNoDefault   s    rV   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-   rB   _get_catch_all_fieldr   
isinstancedict_get_defaultr8   updater9   )
r   r   r:   r;   rX   Zalready_parseddefault_valueZreceived_defaultZvalue_to_writeerror_messager   r   r   r      s<   




z-_CatchAllUndefinedParameters.handle_from_dictrX   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_factoryrB   rV   )rX   Zhas_defaultZhas_default_factoryr_   r   r   r   r]      s   z)_CatchAllUndefinedParameters._get_defaultc                 C   s0   t | j}||j}t|tr|| |S r   )rB   rZ   	__class__rG   r   r[   r\   r^   )r   r   rX   Zundefined_parametersr   r   r   r      s   

z+_CatchAllUndefinedParameters.handle_to_dictc                 C   s   t j| d}t| |jS )NrW   )rB   rZ   getattrr   )r   rX   r   r   r   r      s   z(_CatchAllUndefinedParameters.handle_dumpc                    r?   )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 )Nr@   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>rA   )rB   r-   r8   rC   rZ   r   rD   	enumeraterF   r^   rG   r   )rA   rH   rI   rJ   Zunknown_kwargsrK   rL   Zunknown_argsrM   rF   rN   rO   r   r   _catch_all_init   sB   

zA_CatchAllUndefinedParameters.create_init.<locals>._catch_all_initrQ   )r   rj   r   rO   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 definedr@   z$Multiple catch-all fields supplied: .)
varssysmodulesr/   r   listfilterr   r8   r9   )r   Zcls_globalsZcatch_all_fieldsZnumber_of_catch_all_fieldsr   rm   r   rZ      s"   z1_CatchAllUndefinedParameters._get_catch_all_fieldN)r.   r/   r0   r<   rV   r1   r   r4   r   r   r   r]   r   r   r   r   rZ   r   r   r   r   rB   z   s    #$	!rB   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)
r.   r/   r0   r<   rB   ZINCLUDEr7   ZRAISEr=   ZEXCLUDEr   r   r   r   rv   
  s
    rv   c                   @   s   e Zd ZdZdS )r9   zM
    Raised when something has gone wrong handling undefined parameters.
    N)r.   r/   r0   r<   r   r   r   r   r9     s    r9   )!r2   rb   rT   rR   rr   r   r   typingr   r   r   r   r   r	   r
   r   enumr   Zmarshmallow.exceptionsr   Zdataclasses_json.utilsr   r4   r5   r6   ABCr   r7   ZCatchAllr=   rB   rv   r9   r   r   r   r   <module>   s(    (** 
