U
    sc                      @   s|   d dl Z d dlZd dlmZ d dlmZ dd Zdd Zdd	 Zd
d Z	ddg g fddZ
G dd dZdd Zdd ZdS )    N)Image)serializersc                 C   s6   t d| d| d| s2td| d| d| S )zp
    This function checks if the incoming first name is valid or not!
    it should has 2 to 46 characters.
    u   ^[؀-ۿa-zA-Z.0-9\-،,_()‌ ]{,z}$zsEnter a valid name. it can be english and persian characters, numbers and dot, underline or space and also between z and z characters)rematchr   ValidationError)name
min_length
max_length r   ,/var/www/wikiazma_server/utils/validators.pyname_validator   s    r   c                 C   s   | j |s,tdddd |D  | jd| krLtd| dt| }|j}|j	}||ksr||krtd| d	| S )
NzThe image format must be , c                 S   s   g | ]}|d d qS )   Nr   .0itemr   r   r   
<listcomp>   s     z#image_validetor.<locals>.<listcomp>i   zThe maximum image size must be z MBz$The maximum image side size must be z px)
r   endswithr   r   joinsizer   openheightwidth)imageZimage_size_as_MBformatZmax_sideimr   r   r   r   r   image_validetor   s     


r   c                 C   s&   zt j| dd W n   Y dS X dS )N   )versionFT)uuidUUIDZincoming_idr   r   r   uuid_checker(   s
    r#   c                 C   s   t | r| S tdd S )NzEnter a valid id)r#   r   r   r"   r   r   r   uuid_validator0   s    r$   Fc                    sR  dd }d fdd	}D ]h}	|	 d}
|	 d}|	 d}|	 d	}|
| ksf|| |
 |sp||
 q$|r$|| |
 s$||
|d
 q$D ]t}	|	 d}
|	 d}|	 d}|	 d	}|
| kr| |
 d k	r|| |
 |s||
 q|r|| |
 s||
|d
 qrN| D ]:}
|
dd D kr|
dd D kr||
dd qd S )Nc                 S   s0   |t kr t| t kpt| tkS t| |kS d S )N)floattypeint)valueZexpected_typer   r   r   type_validetor[   s    z%dic_validetor.<locals>.type_validetorFc                    s   |rt |indd D }dd D }||}d}d}|rRd|  d}n*rjd|  d  d	}nd|  d
  d	}rd  drdnd dd| d	}n$  drdnd dd| d	}t | d| id S )Nc                 S   s&   g | ]}|d   d|d j  dqS )key(r&   z)*__name__r   r   r   r   r   g   s    z6dic_validetor.<locals>.raise_error.<locals>.<listcomp>c                 S   s&   g | ]}|d   d|d j  dqS )r*   r+   r&   )r,   r   r   r   r   r   i   s     zUnexpected key 'z'.zvalid 'z'' was not found in one of the items in .z' was not found in zEach item in z must zonly zcontain r    r   r   r   )r*   unexpected_keyerror_messageZrequired_keys_infoZoptional_keys_infoZ	keys_infoprefixsuffixcontainer_name	error_keymanyoptional_itemsraise_error_for_unexpected_keyrequired_itemsr   r   raise_errora   s,    ($z"dic_validetor.<locals>.raise_errorr*   r&   	validatorvalidator_error_message)r4   c                 S   s   g | ]}|d  qS )r*   r   r   r   r   r   r      s     z!dic_validetor.<locals>.<listcomp>T)r3   )FN)get)datar9   r8   r<   r:   r=   r;   r)   r>   r   r*   Z
value_typer?   r@   r   r7   r   dic_validetorZ   s2    









(rC   c                   @   s   e Zd ZdZdd ZdS )IncludeExcludeOnlyValidatorTc                 C   s2   dddg}||kr.t |j dd| d S )Nincludeexcludeonlyz should be one of r   )r   r   
field_namer   )selfr(   serializer_fieldallowed_filter_itemsr   r   r   __call__   s
    
z$IncludeExcludeOnlyValidator.__call__N)r-   
__module____qualname__requires_contextrL   r   r   r   r   rD      s   rD   c                 C   s,   dddg}| |kr(t dd| | S )NZpresentfutureZpastzactive_filter should be one of r   r2   )r(   rK   r   r   r   active_filter_validator   s    
rQ   c                 C   s   t | tk	rtd| S )Nzshould be a valid dict.)r&   dictr   r   )r(   r   r   r   dict_validator   s    
rS   )r   r    PILr   rest_frameworkr   r   r   r#   r$   rC   rD   rQ   rS   r   r   r   r   <module>   s   *N
