
    3h]              	           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 defdZd Z	 	 dd	ed
ededefdZddZd ZddZddZy)   )EmailSyntaxError)EMAIL_MAX_LENGTHLOCAL_PART_MAX_LENGTHDOMAIN_MAX_LENGTHDOT_ATOM_TEXTDOT_ATOM_TEXT_INTLATEXT_REATEXT_INTL_REATEXT_HOSTNAME_INTL
QTEXT_INTLDNS_LABEL_LENGTH_LIMITDOT_ATOM_TEXT_HOSTNAMEDOMAIN_NAME_REGEXDOMAIN_LITERAL_CHARS    N)OptionalFc                 R    t        |       |z
  }|rdnd}|dkD  rdnd}d| | d| dS )zEHelper function to return an error message related to invalid length.z	at least  r   s(z
 characterz
 too many))len)addrutf8limitdiffprefixsuffixs         I/var/www/html/venv/lib/python3.12/site-packages/email_validator/syntax.pyget_length_reasonr      s?    t9uD [bF1HS"FvhtfJvhj99    c                     | dk(  rd|  dS t        j                  |       d   dv rt        |       S t        |       dk  rdt        |       dj	                         }ndt        |       dj	                         }t        j
                  | |      S )	N\"r   LNPSi  zU+04x08x)unicodedatacategoryreprorduppername)chs     r   safe_character_displayr3      s    DyA3bzAq!%99Aw 1vQ##%Q##% Aq!!r    localallow_smtputf8allow_empty_localquoted_local_partc                 j   t        |       dk(  r|st        d      | | ddS t        |       t        kD  r t        | t              }t        d| d      t	        j
                  |       }|r| | ddS d}d}t        j
                  |       }|rO|sHt        d	 | D              }|r)t        d
dj                  t        |            z   dz         t        d      d}d}n|rt        d | D              }|r)t        ddj                  t        |            z   dz         t        d | D              }|r-d}|s)t        d
dj                  t        |            z   dz         d}|rgt        j                  d|       } t        | |dk(         	 | j                  d       |dk(  rdt        j                   dd|       z   dz   } | |s| |dS d|dS t        d | D              }|r)t        ddj                  t        |            z   dz         t#        | ddd       t        d      # t        $ r t        d      w xY w) z;Validates the syntax of the local part of an email address.r   z*There must be something before the @-sign.F)
local_partascii_local_partsmtputf8r   z0The email address is too long before the @-sign .Nc              3   \   K   | ]$  }t        j                  |      st        |       & y wN)r	   matchr3   .0r1   s     r   	<genexpr>z,validate_email_local_part.<locals>.<genexpr>c   s)      ~~a( 'q)   *,zBInternationalized characters before the @-sign are not supported: , zAInternationalized characters before the @-sign are not supported.zdot-atomTc              3   \   K   | ]$  }t        j                  |      st        |       & y wr?   )r   r@   r3   rA   s     r   rC   z,validate_email_local_part.<locals>.<genexpr>{   s+      
##A& #1%
rD   zKThe email address contains invalid characters in quotes before the @-sign: c              3   ^   K   | ]%  }d t        |      cxk  rdk  sn t        |       ' yw)    ~   N)r.   r3   rA   s     r   rC   z,validate_email_local_part.<locals>.<genexpr>   s.      
#a&'C' #1%
s   +-quotedNFC)allow_spacer   z0The email address contains an invalid character.r#   z(["\\])z\\\1c              3   \   K   | ]$  }t        j                  |      st        |       & y wr?   )r
   r@   r3   rA   s     r   rC   z,validate_email_local_part.<locals>.<genexpr>   s+      ""1% 	q!rD   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   r   r   r@   r   setjoinsortedr+   	normalizecheck_unsafe_charsencode
ValueErrorresubcheck_dot_atom)	r4   r5   r6   r7   reasonmvalidrequires_smtputf8	bad_charss	            r   validate_email_local_partr_   &   sK    5zQ "#OPP
 $$)!  5z))"50EF!QRXQYYZ[\\ 	E"A   %
 	
  E  'A   I
 &'knrnwnwx~  @I  yJ  oK  (K  NQ  (Q  R  R ##fgg   

  

 
	
 "#psws|s|  ~D  EN  ~O  tP  $P  SV  $V  W  W  

 
	
  $ "&'knrnwnwx~  @I  yJ  oK  (K  NQ  (Q  R  R   %%eU3 	5u/@B
	WLL  H"&&We<<sBE  ->)
 	
DH)
 	
   I
 beienenouv  pA  fB   B  EH   H  I  	I 5D  GI  W\  ] ]
^^I  	W"#UVV	Ws   H H2c           	         t               }t        |       D ]  \  }}t        j                  |      }|d   dv r#|d   dk(  r|dk(  s1|j	                  |       C|dk(  r|rK|j	                  |       ]|d   dk(  r|j	                  |       w|d   dv r|j	                  |       |j	                  |        |r0t        ddj                  d	 t        |      D              z   d
z         y )Nr   r$   MZsZ)Crc   z.The email address contains unsafe characters: rE   c              3   2   K   | ]  }t        |        y wr?   )r3   rA   s     r   rC   z%check_unsafe_chars.<locals>.<genexpr>   s     *`+A!+D*`s   r=   )rP   	enumerater+   r,   addr   rQ   rR   )r   rL   r^   ir1   r,   s         r   rT   rT      s    I! *1''*A;..a[C
 Ava  a a[C
 MM!a[J& MM! MM!U*V O!%*`fU^N_*`!` acf g h 	h r    c                    | j                  d      rt        |j                  d            | j                  d      rt        |j                  d            d| v rt        d      |rj| j                  d      rt        |j                  d            | j                  d      rt        |j                  d            d| v sd| v rt        d	      y y )
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   format
startswith)labelstart_descr	end_descrrO   s       r   rY   rY     s    ~~cy//9::{11(;<<u}STT>>#"9#3#3H#=>>C ";#5#5h#?@@5=DEM"#kll * r    c                    t        d | D              }|r)t        ddj                  t        |            z   dz         t	        |        	 t        j                  | dd      } t        | d
dd       | j                  d      D ]2  }t        j                  d|t        j                        s)t        d       t        j                  |       r| }nI	 t        j                  | d      j                  d      }t        j                  |      }|st        d      t#        |      t$        kD  r t'        |t$              }t        d| d      |j                  d      D ]4  }t#        |      t(        kD  st'        |t(              }t        d| d       |r6d|vr|dk(  r|st        d      t+        j,                  |      st        d      ddlm}	 |	D ].  }
|
dk(  r|r||
k(  s|j3                  d|
z         s%t        d       	 t        j                  |j                  d            }t        d | D              }|r)t        ddj                  t        |            z   dz         t	        |        ||d S # t
        j                  $ r}t        d| d      d	}~ww xY w# t
        j                  $ r,}dt!        |      v rt        d      t        d| d      d	}~ww xY w# t
        j                  $ r}t        d| d      d	}~ww xY w)!z<Validates the syntax of the domain part of an email address.c              3   \   K   | ]$  }t        j                  |      st        |       & y wr?   r   r@   r3   rA   s     r   rC   z-validate_email_domain_name.<locals>.<genexpr>  +      "((+ 	q!rD   z7The part after the @-sign contains invalid characters: rE   r=   F)
std3_rulestransitionalz7The part after the @-sign contains invalid characters ().Nz?An email address cannot have a {} immediately after the @-sign.z&An email address cannot end with a {}.TrN   z
(?!xn)..--zAn email address cannot have two letters followed by two dashes immediately after the @-sign or after a period, except Punycode.)uts46asciizDomain too longz/The email address is too long after the @-sign.zSThe email address contains invalid characters after the @-sign after IDNA encoding.r<   z/The email address is too long after the @-sign 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.r   )SPECIAL_USE_DOMAIN_NAMESz[The part after the @-sign is a special-use or reserved name that cannot be used with email.z-The part after the @-sign is not valid IDNA (c              3   \   K   | ]$  }t        j                  |      st        |       & y wr?   ru   rA   s     r   rC   z-validate_email_domain_name.<locals>.<genexpr>  rv   rD   )ascii_domaindomain)rP   r   rQ   rR   rT   idnauts46_remap	IDNAErrorrY   splitrW   r@   Ir   rU   decodestrr   r   r   r   r   searchr   r}   rm   )r   test_environmentglobally_deliverabler^   erp   r   r[   rZ   r}   ddomain_i18ns               r   validate_email_domain_namer     si   
   I
 X[_[d[dekluev[wwz}}~~ v`!!&UO 6\  _G  UY  Z c" g88M5"$$/"  $f  g  gg ##F+		d;;vU;BB7KL #((6"#xyy <,,"<7HI!PQWPXXYZ[[ ##C( uu:..&u4JKF"%ijpiqqr#sttu
  l"LF,BGW"#eff !''5"#wxx +% B;+1 5 5cAg >"  $A  B  BBVkk,"5"5g">?   I
 X[_[d[dekluev[wwz}}~~v % } >> `!XYZX[[]^__`J ~~ 	d CF*
 ''XYY"%\]^\__a#bcc	dJ >> V!NqcQSTUUVsH   
I5 &J $K! 5JJJK2'KK!L4LLc                 H   t        j                  d|       r,	 t        j                  |       }|st        d      |d| ddS | j                  d      r9	 t        j                  | d	d        }|st        d      |d|j                   ddS d| vrt        d      t        d | D              }|r)t        ddj                  t        |            z   dz         t        d      # t        $ r}t        d| d      d }~ww xY w# t        $ r}t        d
| d      d }~ww xY w)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.z>A bracketed IPv4 address after the @-sign is not allowed here.[])domain_addressr   zIPv6:   z<The IPv6 address in brackets after the @-sign is not valid (ry   z>A bracketed IPv6 address after the @-sign is not allowed here.z[IPv6::z\The part after the @-sign in brackets is not an IPv4 address and has no address literal tag.c              3   \   K   | ]$  }t        j                  |      st        |       & y wr?   )r   r@   r3   rA   s     r   rC   z0validate_email_domain_literal.<locals>.<genexpr>  s+      #))!, 	q!rD   zCThe part after the @-sign contains invalid characters in brackets: rE   r=   zNThe part after the @-sign contains an invalid address literal tag in brackets.)rW   r@   	ipaddressIPv4AddressrV   r   ro   IPv6Address
compressedrP   rQ   rR   )domain_literalallow_domain_literalr   r   r^   s        r   validate_email_domain_literalr     s    
xx~.	d((8D $"#cdd #$qk
 	
   )	i(();<D $"#cdd
 #t/q1
 	

 . }~~   I
 dgkgpgpqw  yB  rC  hD   D  GJ   J  K  	K k
ll]  	d"%wxywz  {b  $c  d  d	d  	i"%abcaddf#ghh	is/   C$ D $	D-C<<D	D!DD!)TFF)F)FT)exceptions_typesr   rfc_constantsr   r   r   r   r   r	   r
   r   r   r   r   r   r   rW   r+   r   r   typingr   r   r3   r   boolr_   rT   rY   r   r    r    r   <module>r      s    .\ \ \ \ 
     "'.> :"" bg8=d_S d_$ d_Z^ d_15d_N1hhm&[|9mr    