o
    Žèdil  ã                   @   sD   d dl mZ G dd„ dejƒZG dd„ deƒZG dd„ dejƒZdS )	é    )Úserializersc                       s.   e Zd ZdZ‡ fdd„Z		ddd„Z‡  ZS )	ÚDynamicFieldsModelSerializera§  
    A ModelSerializer that allows for dynamic field selection, exclusion, and read-only fields.

    Methods:
        __init__(*args, **kwargs): Initializes the serializer and customizes fields based on 'fields' and 'exclude' arguments.
        unique_value_validator(field, value, error_message, look_up, check_parent_model, model, **kwargs):
            Custom validator for ensuring unique values in a model field.
    c              	      s  |  dd¡}|  dd¡}|  dd¡}tt| ƒj|i |¤Ž | jD ]}d| ¡  dd¡ | j| jd< q |durMt|ƒ}t| jƒ}|| D ]}	| j  |	¡ qD|duret| jƒ}|D ]}	|	|v rd| j  |	¡ qX|dur|D ]}
zd	| j|
 _	W qk t
y~   Y qkw dS dS )
aN  
        Initializes the serializer and customizes fields based on 'fields' and 'exclude' arguments.

        Args:
            *args: Positional arguments for the serializer.
            **kwargs: Keyword arguments for the serializer, including 'fields', 'exclude', and 'read_only_fields'.

        Returns:
            None
        ÚfieldsNÚexcludeÚread_only_fieldsú%s field is required.Ú_Ú ÚrequiredT)ÚpopÚsuperr   Ú__init__r   Ú
capitalizeÚreplaceÚerror_messagesÚsetÚ	read_onlyÚKeyError)ÚselfÚargsÚkwargsr   r   r   ÚfieldÚallowedÚexistingÚ
field_nameÚf©Ú	__class__© úK/var/www/html/evchargy.com/django-station-ev/station_ev/base/serializers.pyr      s:   

þÿ

€þûz%DynamicFieldsModelSerializer.__init__FNc           	      K   sˆ   t  |¡}| j}|s| jjn|}|r|j ¡ d }|||< |r5t||ƒ|kr3|jj	di |¤Ž 
¡ r3|‚|S |jj	di |¤Ž 
¡ rB|‚|S )aœ  
        A custom validator for ensuring unique values in a model field.

        Args:
            field: The field name to validate.
            value: The value to be validated for uniqueness.
            error_message: The error message to raise in case of non-uniqueness.
            look_up: The lookup parameter for filtering the model objects.
            check_parent_model: Whether to check the parent model for uniqueness.
            model: The model class to use for validation. Defaults to the serializer's model.
            kwargs: Additional keyword arguments for the filter.

        Returns:
            The validated value if it is unique.
        r   Nr   )r   ÚValidationErrorÚinstanceÚMetaÚmodelÚ_metaÚget_parent_listÚgetattrÚobjectsÚfilterÚexists)	r   r   ÚvalueÚerror_messageZlook_upZcheck_parent_modelr#   r   r!   r   r   r   Úunique_value_validator@   s   
ÿþz3DynamicFieldsModelSerializer.unique_value_validator)FN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   Ú__classcell__r   r   r   r   r      s    	8ùr   c                       ó    e Zd ZdZ‡ fdd„Z‡  ZS )ÚReadOnlyModelSerializerzÿ
    A ModelSerializer that makes all fields read-only for faster response.
    Extends DynamicFieldsModelSerializer for flexibility in specifying fields.

    Methods:
        get_fields(): Get the fields for serialization and set them as read-only.
    c                    s"   t ƒ  ¡ }| ¡ D ]}d|_q	|S )zŸ
        Get the fields for serialization and set them as read-only.

        Returns:
            dict: A dictionary of fields, all set to read-only.
        T)r   Ú
get_fieldsÚvaluesr   )r   r   r   r   r   r   r4   u   s   
z"ReadOnlyModelSerializer.get_fields)r-   r.   r/   r0   r4   r1   r   r   r   r   r3   l   s    r3   c                       r2   )ÚDynamicFieldsSerializerzÍ
    A serializer that allows custom error messages for required fields.

    Methods:
        __init__(*args, **kwargs): Initializes the serializer and sets custom error messages for required fields.
    c                    sB   t ƒ j|i |¤Ž | jD ]}d| ¡  dd¡ | j| jd< qdS )a
  
        Initializes the serializer and sets custom error messages for required fields.

        Args:
            *args: Positional arguments for the serializer.
            **kwargs: Keyword arguments for the serializer.

        Returns:
            None
        r   r   r	   r
   N)r   r   r   r   r   r   )r   r   r   r   r   r   r   r   Š   s   

þÿÿz DynamicFieldsSerializer.__init__)r-   r.   r/   r0   r   r1   r   r   r   r   r6   ƒ   s    r6   N)Úrest_frameworkr   ÚModelSerializerr   r3   Ú
Serializerr6   r   r   r   r   Ú<module>   s    h