
    g                        S SK JrJr  S SKJrJrJrJrJrJ	r	J
r
JrJrJrJrJrJr  SSKrSSKrSSKrSSKrSSKJrJrJrJr  S\S\\\   \\\4   4S jrS	\S
\S\4S jrS\S\4S jr " S S\5      r   S)S\S\S\S\S\ 4
S jjr!S*S\S\SS4S jjr"S\S\S\S\SS4
S jr# " S S\5      r$S+S\S \S!\S\$4S" jjr%S#\SS4S$ jr& " S% S&\5      r'S'\S\'4S( jr(g),   )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                 (   S[         S[        [         S4   S[        [         [         4   4S jnS[         S[        [         [        4   4S jnU" U S5      u  p4UR                  S5      (       a  UR	                  5       nU" U5      u  pVU(       dt  U Vs1 s H7  n[
        R                  " U5      (       d  US	:w  d  US
:X  d  M,  [        U5      iM9     nnU(       a)  [        SSR                  [        U5      5      -   S
-   5      e[        USS9  SU;  a  [        S5      eUR	                  S	5      nUS   S:w  a  [        S5      eUSS  R	                  S5      n	U" U	S5      u  pOS nX4pUR                  S5      (       a  USS  nU" U
5      u  pXZX4$ s  snf )Ntextspecials.r   c                    SnSnSn[        U 5       Hw  u  pV[        R                  " SXS  5      S   U:w  a  XF-  nM+  U(       a,  XF-  nUS:X  a  U(       d  SnMG  US:X  a  U(       d  SnSnMZ  SnM^  US:X  a  XF-  nSnMl  Xa;   a    OXF-  nMy     [        U5      [        U 5      :X  a  [	        S5      eU [        U5      S  nXG4$ )	NF NFCr   \T"z%An email address must have an @-sign.)	enumerateunicodedata	normalizelenr   )r   r   inside_quoteescaped	left_partic
right_parts           O/home/matz/Project1/venv/lib/python3.13/site-packages/email_validator/syntax.py split_string_at_unquoted_special5split_email.<locals>.split_string_at_unquoted_special1   s    
 	dODA $$UDH5a8A=		9W"G#Xg#(L#G#Gc	#	5 $8 y>SY&"#JKK #i./*
$$    c           
      :   SnSnSn[        U 5       H  u  pEU(       ad  U(       a  X5-  nSnM  US:X  a  SnM%  US:X  a?  U[        U 5      S-
  :w  a)  [        SSR                  S	 XS-   S   5       5      -   5      e  X14$ X5-  nMp  US
:X  a
  US:X  a  SnM  X5-  nM     X14$ )NFr   r   Tr    r   z,Extra character(s) found after close quote: , c              3   8   #    U  H  n[        U5      v   M     g 7fNsafe_character_display.0r)   s     r+   	<genexpr>=split_email.<locals>.unquote_quoted_string.<locals>.<genexpr>o   s     :k^jYZ;QRS;T;T^j   r   )r!   r$   r   join)r   quotedr&   valuer(   r)   s         r+   unquote_quoted_string*split_email.<locals>.unquote_quoted_string]   s    
 dODAJE#G$Y"G#XCIM)./]15:k^bghchci^j:k1k0l m m } JEaAH
# $& }r.   )@<r@    .z>The display name contains invalid characters when not quoted: r0   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.z0There can't be anything after the email address.r   )r?   r?   )strr   bool
startswithrstripr
   matchr4   r   r:   sortedcheck_unsafe_chars)r   r,   r=   r'   r*   display_namedisplay_name_quotedr)   	bad_chars	addr_spec
local_partdomain_partis_quoted_local_parts                r+   split_emailrU      s   H*%s *%eCHo *%RWX[]`X`Ra *%XC E#t),< < =UJOI S!!$$&	 -B),L) # &%A q))a3h18 *&q)%  
 &'gjnjsjstz  |E  uF  kG  (G  JM  (M  N  N 	<T: j "  $U  V  V&&s+
b>S "#UVV qrN))#.	 #C9f"U
K
 "+Kc""!!"o (=Z'H$J[FFKs   +FFaddrlimitc                 D    [        U 5      U-
  nUS:  a  SOSnSU SU S3$ )zEHelper function to return an error message related to invalid length.r   sr   (
 character
 too many))r$   )rV   rW   diffsuffixs       r+   get_length_reasonr_      s2    t9uD1HS"FtfJvhj11r.   r)   c                 *   U S:X  a  SU  S3$ [         R                  " U 5      S   S;   a  [        U 5      $ [        U 5      S:  a  S[        U 5      S 3R	                  5       nOS[        U 5      S 3R	                  5       n[         R
                  " X5      $ )	Nr   r    r   LNPSi  zU+04x08x)r"   categoryreprorduppername)r)   hs     r+   r4   r4      s    DyA3bzAq!%99Aw 1vQ##%Q##% A!!r.   c                   :    \ rS rSr% \\S'   \\   \S'   \\S'   Srg)LocalPartValidationResult   rR   ascii_local_partsmtputf8 N)	__name__
__module____qualname____firstlineno__rG   __annotations__r   rH   __static_attributes__rs   r.   r+   ro   ro      s    Osm#Nr.   ro   localallow_smtputf8allow_empty_localquoted_local_partc                    [        U 5      S:X  a  U(       d  [        S5      eU U SS.$ [        U 5      [        :  a  [        U [        S9n[        SU S35      e[        R
                  " U 5      (       a  U U SS.$ SnSn[        R
                  " U 5      (       a  U(       ds  U  Vs1 s H+  n[        R
                  " U5      (       a  M   [        U5      iM-     nnU(       a)  [        S	S
R                  [        U5      5      -   S-   5      e[        S5      eSnSnOU(       a  U  Vs1 s H+  n[        R
                  " U5      (       a  M   [        U5      iM-     nnU(       a)  [        SS
R                  [        U5      5      -   S-   5      eU  Vs1 s H(  nS[        U5      s=::  a  S::  a  M  O  [        U5      iM*     nnU(       a2  SnU(       d)  [        S	S
R                  [        U5      5      -   S-   5      eSnU(       aT  [        XS:H  S9   U R                  S5        US:X  a  S[         R"                  " SSU 5      -   S-   n U U(       d  U US.$ SUS.$ U  Vs1 s H+  n[$        R
                  " U5      (       a  M   [        U5      iM-     nnU(       a)  [        SS
R                  [        U5      5      -   S-   5      e['        U SSSS9  [        S5      es  snf s  snf s  snf ! [         a  n	[        S5      U	eSn	A	ff = fs  snf )z;Validates the syntax of the local part of an email address.r   z*There must be something before the @-sign.F)rR   rq   rr   rW   z0The email address is too long before the @-sign rB   NzBInternationalized characters before the @-sign are not supported: r0   zAInternationalized characters before the @-sign are not supported.zdot-atomTzKThe email address contains invalid characters in quotes before the @-sign:     ~   r;   rC   utf8z0The email address contains an invalid character.r    z(["\\])z\\\1zAThe 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   rK   r	   r
   r4   r:   rL   r   rj   rM   encode
ValueErrorresubr   check_dot_atom)
rz   r{   r|   r}   reasonvalidrequires_smtputf8r)   rP   es
             r+   validate_email_local_partr      s    5zQ "#OPP
   %
 	
 5z))"50EF!QRXQYYZ[\\ 5!!   %
 	
  E&& A~~a( *&q)  
 &'knrnwnwx~  @I  yJ  oK  (K  NQ  (Q  R  R ##fgg   
 
##A& &"1% 	 

 "#psws|s|  ~D  EN  ~O  tP  $P  SV  $V  W  W
 
#a&'C' &' #1% 	 

  $ "&'knrnwnwx~  @I  yJ  oK  (K  NQ  (Q  R  R   	5/@B
	^LL  H"&&We<<sBE  ->)
 	
DH)
 	
 A &&q) 	"q!  
 beienenouv  pA  fB   B  EH   H  I  	I 5D  GI  W\  ] ]
^^G0

<  	^"#UV\]]	^,sH   #KK"KK
K(K
K K=8K=
K:)K55K:rY   rD   c           	         [        5       n[        U 5       H  u  p4[        R                  " U5      nUS   S;   a  M&  US   S:X  a  US:X  a  UR	                  U5        MH  MJ  US:X  a  U(       d  UR	                  U5        Mj  Ml  US   S:X  a  UR	                  U5        M  US   S:X  a  UR	                  U5        M  UR	                  U5        M     U(       a0  [        SSR                  S	 [        U5       5       5      -   S
-   5      eg )Nr   ra   MZsZCz.The email address contains unsafe characters: r0   c              3   8   #    U  H  n[        U5      v   M     g 7fr2   r3   r5   s     r+   r7   %check_unsafe_chars.<locals>.<genexpr>  s     *`N_+A!+D+DN_r9   rB   )setr!   r"   rh   addr   r:   rL   )rY   rD   rP   r(   r)   rh   s         r+   rM   rM   r  s    I!''*A;..a[C
 Ava   a  a[C
 MM!a[C MM! MM!U V O!%*`fU^N_*`!` acf g h 	h r.   labelstart_descr	end_descrr   c                    U R                  S5      (       a  [        UR                  S5      5      eU R                  S5      (       a  [        UR                  S5      5      eSU ;   a  [        S5      eU(       ax  U R                  S5      (       a  [        UR                  S5      5      eU R                  S5      (       a  [        UR                  S5      5      eSU ;   d  SU ;   a  [        S	5      eg g )
NrB   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   formatrI   )r   r   r   r   s       r+   r   r     s    ~~cy//9::{11(;<<u}STT>>#"9#3#3H#=>>C  ";#5#5h#?@@5=DEM"#kll * r.   c                   *    \ rS rSr% \\S'   \\S'   Srg)DomainNameValidationResulti  ascii_domaindomainrs   N)rt   ru   rv   rw   rG   rx   ry   rs   r.   r+   r   r     s    Kr.   r   r   test_environmentglobally_deliverablec                    U  Vs1 s H+  n[         R                  " U5      (       a  M   [        U5      iM-     nnU(       a)  [        SSR	                  [        U5      5      -   S-   5      e[        U 5        U n [        R                  " U SSS9n U  Vs1 s H+  n[         R                  " U5      (       a  M   [        U5      iM-     nnU(       a)  [        S	SR	                  [        U5      5      -   S-   5      e[        U S
SSS9  U R                  S5       H9  n[        R                  " SU[        R                  5      (       d  M0  [        S5      e   [        R                  " U 5      (       a  U nON SR	                  S U R                  S5       5       5      n[        R                  " U5      (       d  [        S5      e[        U5      [         :  aP  X:X  a  [#        U[         S9n	[        SU	 S35      e[        U5      [         -
  n
U
S:X  a  SOSn[        SU
 SU S35      eUR                  S5       H3  n[        U5      [$        :  d  M  [#        U[$        S9n	[        SU	 S35      e   U(       aD  SU;  a  US:X  a  U(       d  [        S5      e[&        R(                  " U5      (       d  [        S5      eSSKJn  U H;  nUS:X  a	  U(       a  M  X:X  d  UR/                  SU-   5      (       d  M2  [        S 5      e    [        R0                  " UR3                  S!5      5      nU  Vs1 s H+  n[         R                  " U5      (       a  M   [        U5      iM-     nnU(       a)  [        SSR	                  [        U5      5      -   S-   5      e[        U 5         [        R2                  " U5        UUS$.$ s  snf ! [        R                   a  n[        SU S35      UeSnAff = fs  snf ! [        R                   a  n[        SU S35      UeSnAff = f! [        R                   a  n[        S"U S35      UeSnAff = fs  snf ! [        R                   a  n[        S#U S35      UeSnAff = f)%z<Validates the syntax of the domain part of an email address.z7The part after the @-sign contains invalid characters: r0   rB   F)
std3_rulestransitionalz7The part after the @-sign contains invalid characters ().NzSThe 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 {}.Tr   z
(?!xn)..--zAn email address cannot have two letters followed by two dashes immediately after the @-sign or after a period, except Punycode.c              3   l   #    U  H*  n[         R                  " U5      R                  S 5      v   M,     g7f)asciiN)idnaalabeldecode)r6   r   s     r+   r7   -validate_email_domain_name.<locals>.<genexpr>
  s.      $.E E"))'22.s   24z&The part after the @-sign is invalid (zSThe email address contains invalid characters after the @-sign after IDNA encoding.r   z/The email address is too long after the @-sign r   r   rY   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 (zXThe part after the @-sign became invalid after normalizing to international characters ()r   r   )r   rK   r4   r   r:   rL   rM   r   uts46_remap	IDNAErrorr   splitr   Ir   r$   r   r_   r   r   searchr   r   r   r   r   )r   r   r   r)   rP   original_domainr   r   r   r   r]   rY   r   ddomain_i18ns                  r+   validate_email_domain_namer     s    A"((+ 	"q!  
 X[_[d[dekluev[wwz}}~~ v Og!!&UO A"((+ 	"q!  
 tw{  xA  xA  BH  IR  BS  xT   T  WZ   Z  [  	[ 6\  _G  UY  Z c"88M5"$$//"  $f  g  g # ##F++	Z88 $#\\#.$ L &++L99"#xyy <,,*&|;LMF"%TU[T\\]#^__|$'88DaiSA"%UVZU[[`ab`c  dC  $D  E  E ##C(u:..&u4JKF"%ijpiqqr#stt )
  l"LF,BGW"#eff !''55"#wxx +%;+ 5 5cAg > >"  $A  B  B & ]kk,"5"5g">? A"((+ 	"q!  
 X[_[d[dekluev[wwz}}~~vHK  % g2 >> g!XYZX[[]^_effg
Z ~~ 	Z"%KA3b#QRXYY	ZL >> ]!NqcQSTU[\\] >> H!yz{y||~  A  GH  	HHs   N-N-7N2 O4O.'O# 9%P "P;P;Q  2OOO#P7PPP8#P33P8 Q)Q$$Q)addrinfoc                 6   U R                   S 4U R                  S4U R                  =(       d    U R                  =(       d    SS-   U R                  -   S4/nU H  u  p#[        U5      n[        UR                  S5      5      nU[        -
  nUS:  d  M;  Uc  XE:X  a  [        U[        S9nO_UcF  [        S U 5       5      n[        S	Xg-  5      nUS	:  a  S
OSn	X:X  a
  SU SU	 S3nO#SU SU SU	 S3nOUS	:  a  S
OSn	USU SU	 S3-  n[        SU S35      e   g )Nzafter normalizationr   r?   z9when the part after the @-sign is converted to IDNA ASCIIr   r   r   c              3   V   #    U  H  n[        UR                  S 5      5      v   M!     g7f)r   N)r$   r   r5   s     r+   r7   (validate_email_length.<locals>.<genexpr>  s!     ?$Q3qxx/00$s   ')r   rY   rZ   r[   r\   r   z (r   zThe email address is too long rB   )original
normalizedrq   rR   r   r$   r   r   r_   maxr   )
r   addresses_to_checkrV   r   addr_lenaddr_utf8_lenr]   mbpcmcharsr^   s
             r+   validate_email_lengthr   |  sV   2 
		D!			34

#
#
@x':':
@bC	G(J_J_	_  b]  	^ +t9DKK/0//!8~("; +47GH ?$??Q- $qb> j
CF $z&LF
 !%qbBtfE&<<"%CF81#MNN= +r.   c                   \    \ rS rSr% \\R                  \R                  4   \S'   \	\S'   Sr
g)DomainLiteralValidationResulti  domain_addressr   rs   N)rt   ru   rv   rw   r   	ipaddressIPv4AddressIPv6Addressrx   rG   ry   rs   r.   r+   r   r     s#    )//1F1FFGGKr.   r   domain_literalc                    [         R                  " SU 5      (       a    [        R                  " U 5      nUSU S3S.$ U R                  S5      (       a-   [        R                  " U SS  5      nUSUR                   S3S.$ SU ;  a  [        S5      eU  Vs1 s H+  n[        R                  " U5      (       a  M   [        U5      iM-     nnU(       a)  [        SSR                  [        U5      5      -   S-   5      e[        S5      e! [         a  n[        SU S35      UeS nAff = f! [         a  n[        S	U S
35      UeS nAff = fs  snf )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.zCThe part after the @-sign contains invalid characters in brackets: r0   rB   zNThe part after the @-sign contains an invalid address literal tag in brackets.)r   rK   r   r   r   r   rI   r   
compressedr   r4   r:   rL   )r   rV   r   r)   rP   s        r+   validate_email_domain_literalr     s    
xx~..	k((8D #$qk
 	
   ))	p(();<D #t/q1
 	
 . }~~  A#))!, 	"q!  
 dgkgpgpqw  yB  rC  hD   D  GJ   J  K  	K k
llY  	k"%wxywz  {b  $c  d  jk  k	k  	p"%abcaddf#ghnoo	p*s;   D D& E8E
D#DD#&
E0E  E)TFF)F)FT))exceptions_typesr   r   rfc_constantsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r"   r   r   typingr   r   r   r   rG   rH   rU   intr_   r4   ro   r   rM   r   r   r   r   r   r   rs   r.   r+   <module>r      s   >\ \ \ \ 
    4 4cGs cGuXc]Cd%BC cGL2C 2 2 2"c "c ""	  bg8=^_S ^_$ ^_Z^ ^_15^_B[^_B1h# 1hD 1hT 1hhm# mC mC md mW[ m& 
{s {d {bf {  sM {|<ON <Ot <O~I 
9m# 9m:W 9mr.   