o
    Ù­j;˜  ã                   @   sº  d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ ddlZddlZddlZddlZddlmZmZmZmZ dedeee eeef fd	d
„Zdededefdd„Zdedefdd„Z G dd„ deƒZ!		d9dededededede!fdd„Z"d:dededdfdd „Z#d!ed"ed#ed$eddf
d%d&„Z$d'edefd(d)„Z%G d*d+„ d+eƒZ&d;d,ed-ed.ede&fd/d0„Z'd1eddfd2d3„Z(G d4d5„ d5eƒZ)d6ede)fd7d8„Z*dS )<é   )ÚEmailSyntaxError)ÚValidatedEmail)ÚEMAIL_MAX_LENGTHÚLOCAL_PART_MAX_LENGTHÚDOMAIN_MAX_LENGTHÚDOT_ATOM_TEXTÚDOT_ATOM_TEXT_INTLÚATEXT_REÚATEXT_INTL_DOT_REÚATEXT_HOSTNAME_INTLÚ
QTEXT_INTLÚDNS_LABEL_LENGTH_LIMITÚDOT_ATOM_TEXT_HOSTNAMEÚDOMAIN_NAME_REGEXÚDOMAIN_LITERAL_CHARSé    N)ÚOptionalÚTupleÚ	TypedDictÚUnionÚemailÚreturnc                 C   s4  dt dtt df dtt t f fdd„}dt dtt tf fdd„}|| d	ƒ\}}| d
¡r|| ¡ }||ƒ\}}|sNdd„ |D ƒ}|rNtdd t|ƒ¡ d ƒ‚t|dd� d|vr\tdƒ‚| d¡}|d dkrktdƒ‚|dd …  d¡}||dƒ\}	}
nd }||}	}
|
 d¡rŽ|
dd … }
||	ƒ\}	}||	|
|fS )NÚtextÚspecials.r   c                 S   sø   d}d}d}t | ƒD ]I\}}t d| |d … ¡d |kr!||7 }q
|r>||7 }|dkr0|s0d}q
|dkr;|s;d}d}q
d}q
|dkrI||7 }d}q
||v rO n||7 }q
t|ƒt| ƒkrpd| v rdtd	ƒ‚d
| v rltdƒ‚tdƒ‚| t|ƒd … }||fS )NFÚ ÚNFCr   ú\Tú"u   ï¼ zZThe email address has the "full-width" at-sign (@) character instead of a regular at-sign.u   ï¹«zWThe email address has the "small commercial at" character instead of a regular at-sign.z%An email address must have an @-sign.)Ú	enumerateÚunicodedataÚ	normalizeÚlenr   )r   r   Úinside_quoteÚescapedÚ	left_partÚiÚcÚ
right_part© r(   úS/var/www/html/CropPilot/venv/lib/python3.10/site-packages/email_validator/syntax.pyÚ split_string_at_unquoted_special2   s8   

	z5split_email.<locals>.split_string_at_unquoted_specialc              	   S   s¼   d}d}d}t | ƒD ]O\}}|rJ|r||7 }d}q
|dkr d}q
|dkrE|t| ƒd kr@tdd d	d
„ | |d d … D ƒ¡ ƒ‚ ||fS ||7 }q
|dkrU|dkrUd}q
||7 }q
||fS )NFr   r   Tr   r   z,Extra character(s) found after close quote: ú, c                 s   ó   � | ]}t |ƒV  qd S ©N©Úsafe_character_display©Ú.0r&   r(   r(   r)   Ú	<genexpr>…   ó   € z=split_email.<locals>.unquote_quoted_string.<locals>.<genexpr>r   )r   r!   r   Újoin)r   Úquotedr#   Úvaluer%   r&   r(   r(   r)   Úunquote_quoted_strings   s,   ÿ
ú
z*split_email.<locals>.unquote_quoted_string)ú@ú<r9   c                 S   s.   h | ]}t  |¡s|d ks|dkrt|ƒ’qS )ú Ú.©r	   Úmatchr/   r0   r(   r(   r)   Ú	<setcomp>¡   s    ýþzsplit_email.<locals>.<setcomp>z>The display name contains invalid characters when not quoted: r+   r;   T©Úallow_spaceú>zoAn open angle bracket at the start of the email address has to be followed by a close angle bracket at the end.r:   éÿÿÿÿz0There can't be anything after the email address.r   )r8   r8   )	Ústrr   ÚboolÚ
startswithÚrstripr   r4   ÚsortedÚcheck_unsafe_chars)r   r*   r7   r$   r'   Údisplay_nameÚdisplay_name_quotedÚ	bad_charsÚ	addr_specÚ
local_partÚdomain_partÚis_quoted_local_partr(   r(   r)   Úsplit_email   s4   &$A
þ


rP   ÚaddrÚlimitc                 C   s.   t | ƒ| }|dkrdnd}d|› d|› d�S )zEHelper function to return an error message related to invalid length.r   Úsr   ú(ú
 characterú
 too many))r!   )rQ   rR   ÚdiffÚsuffixr(   r(   r)   Úget_length_reasonÉ   s   rY   r&   c                 C   sp   | dkr
d| › d�S t  | ¡d dv rt| ƒS t| ƒdk r(dt| ƒd›� ¡ }n
dt| ƒd›� ¡ }t  | |¡S )	Nr   r   r   ©ÚLÚNÚPÚSiÿÿ  zU+Ú04xÚ08x)r   ÚcategoryÚreprÚordÚupperÚname)r&   Úhr(   r(   r)   r/   Ð   s   r/   c                   @   s*   e Zd ZU eed< ee ed< eed< dS )ÚLocalPartValidationResultrM   Úascii_local_partÚsmtputf8N)Ú__name__Ú
__module__Ú__qualname__rC   Ú__annotations__r   rD   r(   r(   r(   r)   rg   á   s   
 rg   TFÚlocalÚallow_smtputf8Úallow_empty_localÚquoted_local_partÚstrictc           
   
   C   sä  t | ƒdkr|stdƒ‚| | ddœS |r(t | ƒtkr(t| td�}td|› d�ƒ‚t | ¡r3| | ddœS d}d}t | ¡r]|sXd	d
„ | D ƒ}|rTtdd t|ƒ¡ d ƒ‚tdƒ‚d}d}n4|r‘dd
„ | D ƒ}|rutdd t|ƒ¡ d ƒ‚dd
„ | D ƒ}|r�d}|s�tdd t|ƒ¡ d ƒ‚d}|rÐt	| |dkd� z|  
d¡ W n ty³ }	 ztdƒ|	‚d}	~	ww |dkrÃdt dd| ¡ d } | |sË| |dœS d|dœS dd
„ | D ƒ}|rætdd t|ƒ¡ d ƒ‚t| dddd� tdƒ‚) z;Validates the syntax of the local part of an email address.r   z*There must be something before the @-sign.F)rM   rh   ri   ©rR   z0The email address is too long before the @-sign r;   Nc                 S   ó   h | ]}t  |¡st|ƒ’qS r(   r<   r0   r(   r(   r)   r>   "  ó    ýÿz,validate_email_local_part.<locals>.<setcomp>zBInternationalized characters before the @-sign are not supported: r+   zAInternationalized characters before the @-sign are not supported.zdot-atomTc                 S   rt   r(   )r   r=   r/   r0   r(   r(   r)   r>   :  ru   zKThe email address contains invalid characters in quotes before the @-sign: c                 S   s.   h | ]}d t |ƒ  krdksn t|ƒ’qS )é    é~   )rc   r/   r0   r(   r(   r)   r>   C  s
    þr5   r?   Úutf8z0The email address contains an invalid character.r   z(["\\])z\\\1c                 S   rt   r(   )r
   r=   r/   r0   r(   r(   r)   r>   w  ru   zAThe email address contains invalid characters before the @-sign: z(An email address cannot start with a {}.z@An email address cannot have a {} immediately before the @-sign.©Úis_hostnamez@The email address contains invalid characters before the @-sign.)r!   r   r   rY   r   r=   r   r4   rG   rH   ÚencodeÚ
ValueErrorÚreÚsubÚcheck_dot_atom)
rn   ro   rp   rq   rr   ÚreasonÚvalidÚrequires_smtputf8rK   Úer(   r(   r)   Úvalidate_email_local_partç   s‚   ý
	ý

þþþ
€ÿýýþr„   rS   r@   c                 C   sÎ   t ƒ }t| ƒD ]I\}}t |¡}|d dv rq|d dkr'|dkr&| |¡ q|dkr3|s2| |¡ q|d dkr?| |¡ q|d dkrK| |¡ q| |¡ q|retdd d	d
„ t|ƒD ƒ¡ d ƒ‚d S )Nr   rZ   ÚMÚZsÚZÚCz.The email address contains unsafe characters: r+   c                 s   r,   r-   r.   r0   r(   r(   r)   r2   ¹  r3   z%check_unsafe_chars.<locals>.<genexpr>r;   )Úsetr   r   ra   Úaddr   r4   rG   )rS   r@   rK   r%   r&   ra   r(   r(   r)   rH   ˆ  s2   

€

€ÿÿÿrH   ÚlabelÚstart_descrÚ	end_descrrz   c                 C   s”   |   d¡rt| d¡ƒ‚|  d¡rt| d¡ƒ‚d| v r tdƒ‚|rF|   d¡r.t| d¡ƒ‚|  d¡r:t| d¡ƒ‚d| v sBd| v rHtd	ƒ‚d S d S )
Nr;   Úperiodz..z2An email address cannot have two periods in a row.ú-Úhyphenz.-z-.zFAn email address cannot have a period and a hyphen next to each other.)Úendswithr   ÚformatrE   )r‹   rŒ   r�   rz   r(   r(   r)   r   ¼  s   



ùr   Úcharc                 C   sÚ   t | ƒ}d|  krdkrdS  d|  krdkr4n nd|  kr&dks4n d|  kr1d	krPn dS |d
v sPd|  krBdksPn d|  krNdkrRdS  ndS t t|ƒ¡dv r]dS dt t|ƒ¡ d¡v rkdS dS )Né€   éŸ   Fi   i`   i$   i&   i(   i.   )é­   id   iÿ  i   i   i ¼ i£¼ T)ÚCfÚCnÚCoÚCsr†   ÚZlÚZpÚ002Er:   )rc   r   ra   ÚchrÚdecompositionÚsplit)r“   r&   r(   r(   r)   Úuts46_valid_charÏ  s"   þDûýr¡   c                   @   s   e Zd ZU eed< eed< dS )ÚDomainNameValidationResultÚascii_domainÚdomainN)rj   rk   rl   rC   rm   r(   r(   r(   r)   r¢   í  s   
 r¢   r¤   Útest_environmentÚglobally_deliverablec              
   C   s`  dd„ | D ƒ}|rt dd t|ƒ¡ d ƒ‚t| ƒ dd„ | D ƒ}|r0t dd t|ƒ¡ d ƒ‚| }z
tj| ddd�} W n tjyR } z	t d	|› d
�ƒ|‚d}~ww dd„ | D ƒ}|rit dd t|ƒ¡ d ƒ‚t| dddd� |  d¡D ]}t	 
d|t	j¡r„t dƒ‚qvt 
| ¡r�| }n/zd dd„ |  d¡D ƒ¡}W n tjy² } z	t d|› d
�ƒ|‚d}~ww t 
|¡s¼t dƒ‚t|ƒtkrí||krÔt|td�}t d|› d�ƒ‚t|ƒt }	|	dkràdnd}
t d|	› d|
› d�ƒ‚| d¡D ]}t|ƒtk�r	t|td�}t d |› d�ƒ‚qò|�r(d|v�r|d!k�r|�st d"ƒ‚t |¡�s(t d#ƒ‚dd$lm} |D ]}|d!k�r<|�r<�q0||k�sI| d| ¡�rMt d%ƒ‚�q0z
t | d&¡¡}W n tj�yp } z	t d'|› d
�ƒ|‚d}~ww d(d„ |D ƒ}|�rˆt dd t|ƒ¡ d ƒ‚t|ƒ zt |¡ W n tj�yª } z	t d)|› d
�ƒ|‚d}~ww ||d*œS )+z<Validates the syntax of the domain part of an email address.c                 S   rt   r(   ©r   r=   r/   r0   r(   r(   r)   r>   ÷  ru   z-validate_email_domain_name.<locals>.<setcomp>z7The part after the @-sign contains invalid characters: r+   r;   c                 S   s   h | ]
}t |ƒst|ƒ’qS r(   )r¡   r/   r0   r(   r(   r)   r>     s    þÿF)Ú
std3_rulesÚtransitionalz7The part after the @-sign contains invalid characters (ú).Nc                 S   rt   r(   r§   r0   r(   r(   r)   r>     ru   zSThe part after the @-sign contains invalid characters after Unicode normalization: z?An email address cannot have a {} immediately after the @-sign.z&An email address cannot end with a {}.Try   z
(?!xn)..--z€An email address cannot have two letters followed by two dashes immediately after the @-sign or after a period, except Punycode.c                 s   s    � | ]}t  |¡ d ¡V  qdS )ÚasciiN)ÚidnaÚalabelÚdecode)r1   r‹   r(   r(   r)   r2   G  s
   € ÿ
ÿz-validate_email_domain_name.<locals>.<genexpr>z&The part after the @-sign is invalid (zSThe email address contains invalid characters after the @-sign after IDNA encoding.rs   z/The email address is too long after the @-sign r   r   rS   z0The email address is too long after the @-sign (ú bytez too many after IDNA encoding).zDAfter the @-sign, periods cannot be separated by so many characters Útestz@The part after the @-sign is not valid. It should have a period.zRThe part after the @-sign is not valid. It is not within a valid top-level domain.)ÚSPECIAL_USE_DOMAIN_NAMESz[The part after the @-sign is a special-use or reserved name that cannot be used with email.r«   z-The part after the @-sign is not valid IDNA (c                 S   rt   r(   r§   r0   r(   r(   r)   r>   �  ru   zXThe part after the @-sign became invalid after normalizing to international characters ()r£   r¤   )r   r4   rG   rH   r¬   Úuts46_remapÚ	IDNAErrorr   r    r}   r=   ÚIr   r!   r   rY   r   r   Úsearchr   r±   r‘   r®   r{   )r¤   r¥   r¦   rK   Úoriginal_domainrƒ   r‹   r£   r€   rW   rS   r±   ÚdÚdomain_i18nr(   r(   r)   Úvalidate_email_domain_nameò  sª   þÿ
€ÿþ	ÿ

þ€þ
	þÿ€ÿþ€ÿ
þr¹   Úaddrinfoc           
      C   s*  | j d f| jdf| jp| jpdd | j dfg}|D ]x\}}t|ƒ}t| d¡ƒ}|t }|dkr’|d u r@||kr@t|td�}nJ|d u rwt	dd	„ |D ƒƒ}t	d
|| ƒ}|d
krZdnd}	||krjd|› d|	› d�}n d|› d|› d|	› d�}n|d
kr}dnd}	|d|› d|	› d�7 }t
d|› d�ƒ‚qd S )Nzafter normalizationr   r8   z9when the part after the @-sign is converted to IDNA ASCIIrx   r   rs   c                 s   s   � | ]
}t | d ¡ƒV  qdS )rx   N)r!   r{   r0   r(   r(   r)   r2   è  s   € z(validate_email_length.<locals>.<genexpr>r   rS   rT   rU   rV   r�   z (r¯   zThe email address is too long r;   )ÚoriginalÚ
normalizedrh   rM   r£   r!   r{   r   rY   Úmaxr   )
rº   Úaddresses_to_checkrQ   r€   Úaddr_lenÚaddr_utf8_lenrW   ÚmbpcÚmcharsrX   r(   r(   r)   Úvalidate_email_length¹  s.   ýæürÃ   c                   @   s*   e Zd ZU eejejf ed< eed< dS )ÚDomainLiteralValidationResultÚdomain_addressr¤   N)	rj   rk   rl   r   Ú	ipaddressÚIPv4AddressÚIPv6Addressrm   rC   r(   r(   r(   r)   rÄ   ø  s   
 rÄ   Údomain_literalc              
   C   sü   t  d| ¡r,zt | ¡}W n ty" } z	td|› d�ƒ|‚d }~ww |d|› d�dœS |  d¡r\zt | dd … ¡}W n tyQ } z	td	|› d
�ƒ|‚d }~ww |d|j› d�dœS d| vrdtdƒ‚dd„ | D ƒ}|rztdd 	t
|ƒ¡ d ƒ‚tdƒ‚)Nz
^[0-9\.]+$zRThe address in brackets after the @-sign is not valid: It is not an IPv4 address (z') or is missing an address literal tag.ú[ú])rÅ   r¤   zIPv6:é   z<The IPv6 address in brackets after the @-sign is not valid (rª   z[IPv6:ú:z\The part after the @-sign in brackets is not an IPv4 address and has no address literal tag.c                 S   rt   r(   )r   r=   r/   r0   r(   r(   r)   r>   ,  ru   z0validate_email_domain_literal.<locals>.<setcomp>zCThe part after the @-sign contains invalid characters in brackets: r+   r;   zNThe part after the @-sign contains an invalid address literal tag in brackets.)r}   r=   rÆ   rÇ   r|   r   rE   rÈ   Ú
compressedr4   rG   )rÉ   rQ   rƒ   rK   r(   r(   r)   Úvalidate_email_domain_literalý  s8   
€ÿ
þ
€ÿþþrÏ   )TFFF)F)FT)+Ú
exceptionsr   Útypesr   Úrfc_constantsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r}   r   r¬   rÆ   Útypingr   r   r   r   rC   rD   rP   ÚintrY   r/   rg   r„   rH   r   r¡   r¢   r¹   rÃ   rÄ   rÏ   r(   r(   r(   r)   Ú<module>   s@    <" <ÿÿÿ
ÿ "4 H?