o
    0=g'                     @   s   d dl mZ ddlmZ ddlZddlZd dlmZ ddl	m	Z	m
Z
 ddlmZ dd	 Zd
d Zdd Zdd Zd ddZdd Zdd Zdd Zdd Zd!ddZdd Zdd ZdS )"   )ValidationError    )validate_emailN)validation_msg)datetimetimezone)settingsc              	      s   i  | j dkr | j n3| j dv r | j n'| j dv rAz| jd} t| W n tjt	fy@   t
td  w  fdd|D }|rVt
dd	| d S )
NGET)POSTPUT)r   DELETEzutf-8jsonc                    s    g | ]}| vs | s|qS  r   ).0paramrequest_datar   //var/www/html/django-vendor/utils/validation.py
<listcomp>   s     z,validate_required_params.<locals>.<listcomp>zMissing required parameters: z, )methodupdater	   databodydecoder   loadsJSONDecodeErrorUnicodeDecodeErrorr   r   join)requestrequired_paramsrequest_bodymissing_paramsr   r   r   validate_required_params
   s    


r"   c                 C   s:   | j d}|t|d   }||vrttd  d S )N.r   file)namesplitlenlowerr   r   )r$   
valid_type
file_split	file_typer   r   r   validate_file_type   s
   r,   c              	   C   s   |D ]p}|dkrt | qtd|rK|d}|d dkr+t| |d d t|d  q|d dkr>t| |d t|d d  qt| |t|d d d  q|dkrUt| | q|d	kr_t| | q|d
krit| | q|dkrrt	| | qd S )Nemaillength:r   max   mincapital_lettersmall_letternumberspecial_characters)
is_emailresearchr&   
has_lengthinthas_capital_letterhas_small_letter
has_numberhas_special_character)keyvalvalidations
validationlen_strr   r   r   validate#   s(   


rE   c              
   C   s4   zt |  W dS  ty } zttd d }~ww )NTr-   )django_validate_email	Exceptionr   r   )valueer   r   r   r7   :   s   r7   c                 C   s   |d urt ||krttd  d|  d| |d ur1t ||k r1ttd  d|  d| d|d urJt ||krLttd  d|  d| dd S d S )Nr.   z: z length should be exactly z must be at least z characters long.r/   )r'   r   r   )r@   rA   exact_length
min_length
max_lengthr   r   r   r:   A   s   r:   c                 C   "   t dd |D sttd d S )Nc                 s       | ]}|  V  qd S N)isupperr   cr   r   r   	<genexpr>N       z%has_capital_letter.<locals>.<genexpr>r3   anyr   r   r@   rA   r   r   r   r<   M      r<   c                 C   rM   )Nc                 s   rN   rO   )islowerrQ   r   r   r   rS   R   rT   z#has_small_letter.<locals>.<genexpr>r4   rU   rW   r   r   r   r=   Q   rX   r=   c                 C   rM   )Nc                 s   rN   rO   )isdigitrQ   r   r   r   rS   W   rT   zhas_number.<locals>.<genexpr>r5   rU   rW   r   r   r   r>   V   rX   r>   c                 C   rM   )Nc                 s   s    | ]}|d v V  qdS )z !@#$%^&*()-_=+[{]};:'",<.>/?\|`~Nr   rQ   r   r   r   rS   \   rT   z(has_special_character.<locals>.<genexpr>r6   rU   rW   r   r   r   r?   [   rX   r?   c                 C   s0   ||i}| j jdi | sttd  d S )Nforeign_keyr   )objectsfilterexistsr   r   )model_classfield_value
field_namefilter_kwargsr   r   r   is_valid_foreign_key`   s   rc   c                 C   s6   t |tst|  d|t k rt|  dd S )Nz must be a valid datetime.z%: The deadline must be in the future.)
isinstancer   r   r   nowrW   r   r   r   validate_deadlinee   s
   
rf   c                 C   s*   t dt j}||sttd  d S )Nz^(?:http|ftp)s?://(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[?[A-F0-9]*:[A-F0-9:]+\]?)(?::\d+)?(?:/?|[/?]\S+)$url)r8   compile
IGNORECASEmatchr   r   )r@   rA   url_patternr   r   r   validate_urlm   s   
rl   )NNN)r   )	exceptionr   django.core.validatorsr   rF   r   r8   r   r   r   r   django.confr   r"   r,   rE   r7   r:   r<   r=   r>   r?   rc   rf   rl   r   r   r   r   <module>   s&    

