o
    "7hW                     @   sB  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ ddg di fZe
G dd dZe
G dd deZe Ze
G dd deZeededddZdd Ze
G dd dZe ZedZeeeddZedZ ee eddZ!dd  Z"d!d" Z#d#d$ Z$e$ge"ge#gd%Z%d&d' Z&dDd*d+Z'e'ed,d-Z(e
G d.d/ d/Z)e
G d0d1 d1e)Z*e
G d2d3 d3e)Z+e
G d4d5 d5e)Z,e
G d6d7 d7e)Z-e
G d8d9 d9e)Z.e
G d:d; d;Z/e
G d<d= d=Z0d>d? Z1d@dA Z2e
G dBdC dCZ3dS )E    N)Path)urlsplit)ValidationError)deconstructible)MAX_URL_LENGTH)is_valid_ipv6_address)_lazy_re_compile)gettext_lazy)ngettext_lazy  c                   @   s@   e Zd ZdZedZdZdZdZ	dddZ	d	d
 Z
dd ZdS )RegexValidatorr   zEnter a valid value.invalidFr   Nc                 C   st   |d ur|| _ |d ur|| _|d ur|| _|d ur|| _|d ur#|| _| jr0t| j ts0tdt| j | j| _ d S )Nz@If the flags are set, regex must be a regular expression string.)	regexmessagecodeinverse_matchflags
isinstancestr	TypeErrorr   )selfr   r   r   r   r   r   r   k/var/www/epreuve.sigeris.cm/public_html/epreuve/venv/lib/python3.10/site-packages/django/core/validators.py__init__   s   zRegexValidator.__init__c                 C   s>   | j t|}| jr|n| }|rt| j| jd|iddS )z
        Validate that the input contains (or does *not* contain, if
        inverse_match is True) a match for the regular expression.
        valuer   paramsN)r   searchr   r   r   r   r   )r   r   regex_matchesinvalid_inputr   r   r   __call__/   s
   zRegexValidator.__call__c                 C   sN   t |to&| jj|jjko&| jj|jjko&| j|jko&| j|jko&| j|jkS N)r   r   r   patternr   r   r   r   r   otherr   r   r   __eq__9   s   



zRegexValidator.__eq__)NNNNN)__name__
__module____qualname__r   _r   r   r   r   r   r    r%   r   r   r   r   r      s    

r   c                       s   e Zd ZedZdZde d e d e d Zde d Zd	e d
 Zed Z	dZ
dZdZdZ fddZ fddZ  ZS )DomainNameValidatorzEnter a valid domain name.u   ¡-￿z[a-zz0-9](?:[a-zz0-9-]{0,61}[a-zz0-9])?z(?:\.(?!-)[a-zz0-9-]{1,63}(?<!-))*z\.(?!-)(?:[a-zz"-]{2,63}|xn--[a-z0-9]{1,59})(?<!-)z\.?z-[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?z$(?:\.(?!-)[a-zA-Z0-9-]{1,63}(?<!-))*z&\.(?!-)(?:[a-zA-Z0-9-]{2,63})(?<!-)\.?   c                    st   | dd| _| jrtd| j | j | j d tj| _ntd| j	 | j
 | j d tj| _t jdi | d S )Naccept_idnaT^$r   )popr,   r   hostname_re	domain_retld_rere
IGNORECASEr   ascii_only_hostname_reascii_only_domain_reascii_only_tld_resuperr   )r   kwargs	__class__r   r   r   c   s&   zDomainNameValidator.__init__c                    sb   t |trt|| jkrt| j| jd|id| js)| s)t| j| jd|idt	 
| d S )Nr   r   )r   r   len
max_lengthr   r   r   r,   isasciir8   r    r   r   r:   r   r   r    v   s
   zDomainNameValidator.__call__)r&   r'   r(   r)   r   ulr0   r1   tld_no_fqdn_rer2   r5   r6   r7   r=   r   r    __classcell__r   r   r:   r   r*   D   s(    r*   c                       s   e Zd ZdZdZejZejZejZde e e d Z	e
de d e d e	 d ejZedZg d	Zed
ZeZd fdd	Z fddZ  ZS )URLValidatorzo(?:0|25[0-5]|2[0-4][0-9]|1[0-9]?[0-9]?|[1-9][0-9]?)(?:\.(?:0|25[0-5]|2[0-4][0-9]|1[0-9]?[0-9]?|[1-9][0-9]?)){3}z\[[0-9a-f:.]+\](z|localhost)z5^(?:[a-z0-9.+-]*)://(?:[^\s:@/]+(?::[^\s:@/]*)?@)?(?:|z#)(?::[0-9]{1,5})?(?:[/?#][^\s]*)?\ZzEnter a valid URL.)httphttpsftpftpsz	
Nc                    s(   t  jdi | |d ur|| _d S d S )Nr   )r8   r   schemes)r   rJ   r9   r:   r   r   r      s   
zURLValidator.__init__c                    s>  t |trt|| jkrt| j| jd|id| j|r(t| j| jd|id|	dd 
 }|| jvrAt| j| jd|idzt|}W n tyY   t| j| jd|idw t | td|j}|r|d }zt| W n ty   t| j| jd|idw |jd u st|jdkrt| j| jd|idd S )Nr   r   z://r   z^\[(.+)\](?::[0-9]{1,5})?$      )r   r   r<   r=   r   r   r   unsafe_charsintersectionsplitlowerrJ   r   
ValueErrorr8   r    r3   r   netlocvalidate_ipv6_addresshostname)r   r   schemesplitted_url
host_matchpotential_ipr:   r   r   r       s4   
	zURLValidator.__call__r!   )r&   r'   r(   ipv4_reipv6_rer*   r0   r1   r2   host_rer   r3   r4   r   r)   r   rJ   	frozensetrM   r   r=   r   r    rB   r   r   r:   r   rC      s<    	rC   z^-?\d+\ZzEnter a valid integer.r   r   r   c                 C   s   t | S r!   )integer_validatorr   r   r   r   validate_integer      r`   c                   @   s   e Zd ZedZdZejZejZej	Z	e
dejZe
de e e	 d ejZe
dejZdgZdd	d
Zdd Zdd Zdd ZdS )EmailValidatorzEnter a valid email address.r   z(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*\Z|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"\Z)r-   z\Zz\[([A-F0-9:.]+)\]\Z	localhostNc                 C   s2   |d ur|| _ |d ur|| _|d ur|| _d S d S r!   )r   r   domain_allowlist)r   r   r   	allowlistr   r   r   r      s   
zEmailValidator.__init__c                 C   s   |rd|vst |dkrt| j| jd|id|dd\}}| j|s0t| j| jd|id|| jvrE| |sGt| j| jd|idd S d S )N@i@  r   r   rK   )	r<   r   r   r   rsplit
user_regexmatchrd   validate_domain_part)r   r   	user_partdomain_partr   r   r   r       s   zEmailValidator.__call__c                 C   sP   | j |rdS | j|}|r&|d }zt| W dS  ty%   Y dS w dS )NTrK   F)domain_regexri   literal_regexvalidate_ipv46_addressr   )r   rl   literal_match
ip_addressr   r   r   rj     s   z#EmailValidator.validate_domain_partc                 C   s6   t |tot| jt|jko| j|jko| j|jkS r!   )r   rb   setrd   r   r   r#   r   r   r   r%     s   


zEmailValidator.__eq__NNN)r&   r'   r(   r)   r   r   r*   r0   r1   rA   r   r3   r4   rh   rm   rn   rd   r   r    rj   r%   r   r   r   r   rb      s.    
rb   z^[-a-zA-Z0-9_]+\ZuP   Enter a valid “slug” consisting of letters, numbers, underscores or hyphens.z	^[-\w]+\ZuY   Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or hyphens.c              	   C   s<   zt |  W d S  ty   ttddtd| ddw )N#Enter a valid %(protocol)s address.r   IPv4protocolr   r   )	ipaddressIPv4AddressrQ   r   r)   r_   r   r   r   validate_ipv4_address0  s   rz   c                 C   s(   t | sttddtd| ddd S )Nrt   r   IPv6rv   r   )r   r   r)   r_   r   r   r   rS   ;  s   rS   c                 C   sZ   zt |  W d S  ty,   zt|  W Y d S  ty+   ttddtd| ddw w )Nrt   r   zIPv4 or IPv6rv   r   )rz   r   rS   r)   r_   r   r   r   ro   D  s   ro   )bothipv4ipv6c                 C   sF   | dkr
|r
t dzt|   W S  ty"   t d| ttf w )zq
    Depending on the given parameters, return the appropriate validators for
    the GenericIPAddressField.
    r|   z=You can only use `unpack_ipv4` if `protocol` is set to 'both'z+The protocol '%s' is unknown. Supported: %s)rQ   ip_address_validator_maprP   KeyErrorlist)rw   unpack_ipv4r   r   r   ip_address_validatorsY  s   
r   ,Fc                 C   s.   t d|rdndt| d }t|||dS )Nz#^%(neg)s\d+(?:%(sep)s%(neg)s\d+)*\Zz(-)?r   )negsepr]   )r   r3   escaper   )r   r   r   allow_negativeregexpr   r   r   int_list_validatork  s   
r   z&Enter only digits separated by commas.)r   c                   @   sB   e Zd ZedZdZdddZdd Zdd	 Zd
d Z	dd Z
dS )BaseValidatorz<Ensure this value is %(limit_value)s (it is %(show_value)s).limit_valueNc                 C   s   || _ |r
|| _d S d S r!   )r   r   )r   r   r   r   r   r   r     s   
zBaseValidator.__init__c                 C   sP   |  |}t| jr|  n| j}|||d}| ||r&t| j| j|dd S )N)r   
show_valuer   r   )cleancallabler   comparer   r   r   )r   r   cleanedr   r   r   r   r   r      s   
zBaseValidator.__call__c                 C   s4   t || jstS | j|jko| j|jko| j|jkS r!   )r   r;   NotImplementedr   r   r   r#   r   r   r   r%     s   

zBaseValidator.__eq__c                 C   s   ||uS r!   r   r   abr   r   r   r     ra   zBaseValidator.comparec                 C   s   |S r!   r   r   xr   r   r   r     s   zBaseValidator.cleanr!   )r&   r'   r(   r)   r   r   r   r    r%   r   r   r   r   r   r   r   {  s    
		r   c                   @       e Zd ZedZdZdd ZdS )MaxValueValidatorz;Ensure this value is less than or equal to %(limit_value)s.	max_valuec                 C      ||kS r!   r   r   r   r   r   r     ra   zMaxValueValidator.compareNr&   r'   r(   r)   r   r   r   r   r   r   r   r         r   c                   @   r   )MinValueValidatorz>Ensure this value is greater than or equal to %(limit_value)s.	min_valuec                 C      ||k S r!   r   r   r   r   r   r     ra   zMinValueValidator.compareNr   r   r   r   r   r     r   r   c                       s>   e Zd ZedZdZd
 fdd	Z fddZdd	 Z  Z	S )StepValueValidatorz=Ensure this value is a multiple of step size %(limit_value)s.	step_sizeNc                    s*   t  || |d urtd| _|| _d S )NzEnsure this value is a multiple of step size %(limit_value)s, starting from %(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on.)r8   r   r)   r   offset)r   r   r   r   r:   r   r   r     s   
zStepValueValidator.__init__c                    s   | j d u rt | d S | |}t| jr|  n| j}| ||r@|| j }|||| |d|  d}t| j	| j
|dd S )N   )r   r   valid_value1valid_value2r   )r   r8   r    r   r   r   r   r;   r   r   r   )r   r   r   r   r   r   r:   r   r   r      s   


zStepValueValidator.__call__c                 C   s2   | j d u rdn| j }tjt|| |ddd S )Nr   g&.>)abs_tol)r   mathisclose	remainder)r   r   r   r   r   r   r   r     s   zStepValueValidator.compareNN)
r&   r'   r(   r)   r   r   r   r    r   rB   r   r   r:   r   r     s    
r   c                   @   ,   e Zd ZedddZdZdd Zdd Zd	S )
MinLengthValidatorzQEnsure this value has at least %(limit_value)d character (it has %(show_value)d).zREnsure this value has at least %(limit_value)d characters (it has %(show_value)d).r   
min_lengthc                 C   r   r!   r   r   r   r   r   r     ra   zMinLengthValidator.comparec                 C      t |S r!   r<   r   r   r   r   r     ra   zMinLengthValidator.cleanNr&   r'   r(   r
   r   r   r   r   r   r   r   r   r         r   c                   @   r   )
MaxLengthValidatorzPEnsure this value has at most %(limit_value)d character (it has %(show_value)d).zQEnsure this value has at most %(limit_value)d characters (it has %(show_value)d).r   r=   c                 C   r   r!   r   r   r   r   r   r     ra   zMaxLengthValidator.comparec                 C   r   r!   r   r   r   r   r   r     ra   zMaxLengthValidator.cleanNr   r   r   r   r   r     r   r   c                   @   sR   e Zd ZdZededddedddedd	dd
Zdd Zdd Zdd Z	dS )DecimalValidatorz}
    Validate that the input does not exceed the maximum number of digits
    expected, otherwise raise ValidationError.
    zEnter a number.z:Ensure that there are no more than %(max)s digit in total.z;Ensure that there are no more than %(max)s digits in total.maxz9Ensure that there are no more than %(max)s decimal place.z:Ensure that there are no more than %(max)s decimal places.zJEnsure that there are no more than %(max)s digit before the decimal point.zKEnsure that there are no more than %(max)s digits before the decimal point.)r   
max_digitsmax_decimal_placesmax_whole_digitsc                 C   s   || _ || _d S r!   )r   decimal_places)r   r   r   r   r   r   r     s   
zDecimalValidator.__init__c                 C   sB  |  dd  \}}|dv rt| jd dd|id|dkr-t|}|dkr*||7 }d}nt|t|kr<t| }}nt|}t|}|| }| jd ur`|| jkr`t| jd d| j|d	d| jd urx|| jkrxt| jd
 d
| j|d	d| jd ur| jd ur|| j| j krt| jd d| j| j |d	dd S d S d S )NrK   >   FNnr   r   r   r   )r   r   )r   r   r   r   )as_tupler   messagesr<   absr   r   )r   r   digit_tupleexponentdigitsdecimalswhole_digitsr   r   r   r      sL   



zDecimalValidator.__call__c                 C   $   t || jo| j|jko| j|jkS r!   )r   r;   r   r   r#   r   r   r   r%   J  
   

zDecimalValidator.__eq__N)
r&   r'   r(   __doc__r)   r
   r   r   r    r%   r   r   r   r   r     s,    0r   c                   @   s2   e Zd ZedZdZd
ddZdd Zdd	 ZdS )FileExtensionValidatorub   File extension “%(extension)s” is not allowed. Allowed extensions are: %(allowed_extensions)s.invalid_extensionNc                 C   s@   |d urdd |D }|| _ |d ur|| _|d ur|| _d S d S )Nc                 S   s   g | ]}|  qS r   rP   ).0allowed_extensionr   r   r   
<listcomp>\  s    z3FileExtensionValidator.__init__.<locals>.<listcomp>)allowed_extensionsr   r   )r   r   r   r   r   r   r   r   Z  s   
zFileExtensionValidator.__init__c                 C   sV   t |jjdd   }| jd ur'|| jvr)t| j| j|d| j|ddd S d S )NrK   z, )	extensionr   r   r   )	r   namesuffixrP   r   r   r   r   join)r   r   r   r   r   r   r    e  s   


zFileExtensionValidator.__call__c                 C   s@   t || jot| jpg t|jpg ko| j|jko| j|jkS r!   )r   r;   rr   r   r   r   r#   r   r   r   r%   u  s   

zFileExtensionValidator.__eq__rs   )	r&   r'   r(   r)   r   r   r   r    r%   r   r   r   r   r   R  s    
r   c                  C   s@   zddl m}  W n ty   g  Y S w |   dd | jD S )Nr   Imagec                 S   s   g | ]
}|  d d qS )rK   Nr   )r   extr   r   r   r     s    z2get_available_image_extensions.<locals>.<listcomp>)PILr   ImportErrorinit	EXTENSIONr   r   r   r   get_available_image_extensions  s   r   c                 C   s   t t d| S )N)r   )r   r   r_   r   r   r   validate_image_file_extension  s   
r   c                   @   s6   e Zd ZdZedZdZdddZdd Zd	d
 Z	dS )ProhibitNullCharactersValidatorz<Validate that the string doesn't contain the null character.z Null characters are not allowed.null_characters_not_allowedNc                 C   s$   |d ur|| _ |d ur|| _d S d S r!   r]   )r   r   r   r   r   r   r     s
   
z(ProhibitNullCharactersValidator.__init__c                 C   s&   dt |v rt| j| jd|idd S )N r   r   )r   r   r   r   r?   r   r   r   r      s   z(ProhibitNullCharactersValidator.__call__c                 C   r   r!   )r   r;   r   r   r#   r   r   r   r%     r   z&ProhibitNullCharactersValidator.__eq__r   )
r&   r'   r(   r   r)   r   r   r   r    r%   r   r   r   r   r     s    
r   )r   Nr   F)4rx   r   r3   pathlibr   urllib.parser   django.core.exceptionsr   django.utils.deconstructr   django.utils.httpr   django.utils.ipv6r   django.utils.regex_helperr   django.utils.translationr	   r)   r
   EMPTY_VALUESr   r*   validate_domain_namerC   r^   r`   rb   validate_emailslug_revalidate_slugslug_unicode_revalidate_unicode_slugrz   rS   ro   r   r   r   %validate_comma_separated_integer_listr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    09DI
	
"%W,
