o
    "7h1                     @   s|   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 G dd deZG dd	 d	e eeZG d
d deZdS )    N)NON_FIELD_ERRORSValidationError)Field)DeclarativeFieldsMetaclass)	ErrorDict	ErrorListc                       s   e Zd ZdZdZdZd fdd	Zdd Zed	d
 Z	e
dd Zdd Zdd Zdd Zdd Zdd Zdd Ze
dd Z  ZS )BaseDeserializerz
    The main implementation of Deserializers logic. Note that this class is
    slightly different from the classic Form.
     )N Nc                    s$   t t| jdi | | | d S )Nr	   )superr   __init__
_init_data)selfdatakwargs	__class__r	   s/var/www/epreuve.sigeris.cm/public_html/epreuve/venv/lib/python3.10/site-packages/django_rest/deserializers/base.pyr      s   zBaseDeserializer.__init__c                 C   s   || _ d | _d | _d S N)_data_errors_cleaned_datar   r   r	   r	   r   r      s   
zBaseDeserializer._init_datac                 c   s"    | j D ]
}|| j | fV  qd S r   )declared_fields)clsnamer	   r	   r   fields   s   
zBaseDeserializer.fieldsc                 C   s   | j du r	|   | j S )z?Return an ErrorDict for the data provided for the deserializer.N)r   
full_cleanr   r	   r	   r   errors$   s   
zBaseDeserializer.errorsc                 C   s   | j  S )zBReturn True if the deserializer has no errors, or False otherwise.)r   r   r	   r	   r   is_valid,   s   zBaseDeserializer.is_validc                 C   s$   t |ds|pt|jiS |t|iS )N
error_dict)hasattrr   messagesdict)r   
field_nameerrorr	   r	   r   _get_error_dict0   s   
z BaseDeserializer._get_error_dictc                 C   s,   |  ||}| D ]	\}}|| j|< q
dS )zb
        Updates the content of `self._errors`. Each `self._errors` is a `dict` instance.
        N)r'   itemsr   )r   r%   r&   r   r	   r	   r   	add_error9   s   zBaseDeserializer.add_errorc                 C   s   t  | _i | _|   dS )z[
        Clean all of self._data and populate self._errors and self._cleaned_data.
        N)r   r   r   _clean_fieldsr   r	   r	   r   r   B   s   zBaseDeserializer.full_cleanc                 C   s   | j | jv r| j | _d S t| j tstdg}t|| j D ]H\}}| j 	|}z#|
|}|| j|< t| d|rLt| d||}|| j|< W q  tyh } z|jr^| || W Y d }~q d }~ww d S )NzThis field should be an object.zpost_clean_{})r   empty_valuesr   
isinstancer$   r   r   r   r(   getcleanr"   formatgetattrrequiredr)   )r   
error_listr   fieldvalueer	   r	   r   r*   J   s*   



zBaseDeserializer._clean_fieldsc                 C   s*   |  | | | | jrt| j| jS )a{  
        Overriden version of superclass Field.clean(). Called in case of nested
        Deserializers. Performs the validation and cleaning process on the data
        parameter. Returns the cleaned data to the parent deserializer.
        In case of error, Raises `ValidationError` with the whole ErrorDict()
        of its errors in order to be catched in the parent.
        )validater   r   r   r   r   r	   r	   r   r.   ]   s
   


zBaseDeserializer.cleanc                 C   s   | j s|   | j S r   )r   r   r   r	   r	   r   r   o   s   zBaseDeserializer.datar   )__name__
__module____qualname____doc__	__slots__r+   r   r   classmethodr   propertyr   r    r'   r)   r   r*   r.   r   __classcell__r	   r	   r   r   r   
   s$    

		r   c                   @   s   e Zd ZdS )DeserializerN)r7   r8   r9   r	   r	   r	   r   r?   w   s    r?   c                   @   s   e Zd ZdZdd ZdS )AllPassDeserializerzgDeserializer that accepts any given data. the clean always returns
    the data received as input.
    c                 C   s"   | j  D ]	\}}|| j|< qd S r   )r   r(   r   )r   r   r4   r	   r	   r   r*      s   z!AllPassDeserializer._clean_fieldsN)r7   r8   r9   r:   r*   r	   r	   r	   r   r@   {   s    r@   )sixdjango.core.exceptionsr   r   django.forms.fieldsr   django.forms.formsr   django.forms.utilsr   r   r   with_metaclassr?   r@   r	   r	   r	   r   <module>   s   m