
    i;                        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	Zd
ededefdZdedefdZ  G d de          Z!	 	 d/dededededede!fdZ"d0dededdfdZ#dededededdf
d Z$d!edefd"Z% G d# d$e          Z&d1d%ed&ed'ede&fd(Z'd)eddfd*Z( G d+ d,e          Z)d-ede)fd.Z*dS )2   )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                 D   dt           dt          t           df         dt          t           t           f         fd}dt           dt          t           t          f         fd} || d          \  }}|                    d          r|                                } ||          \  }}|sCd	 |D             }|r5t          d
d                    t          |                    z   dz             t          |d           d|vrt          d          |                    d          }|d         dk    rt          d          |dd                              d          } ||d          \  }	}
nd }||}
}	|
                    d          r
|
dd          }
 ||	          \  }	}||	|
|fS )Ntextspecials.r   c                    d}d}d}t          |           D ]m\  }}t          j        d| |d                    d         |k    r||z  }2|r ||z  }|dk    r|sd}D|dk    r|sd}d}Qd}T|dk    r||z  }d}b||v r n||z  }nt          |          t          |           k    r5d| v rt	          d	          d
| v rt	          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_parts           f/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/email_validator/syntax.py split_string_at_unquoted_specialz5split_email.<locals>.split_string_at_unquoted_special2   sj   
 	dOO 	 	DAq $UDH55a8A==Q		 Q	99W9"GG#XXgX#(L#GG#GGcQ	#hQ		
 y>>SYY&& }}&  (F  G  G  G }}&  (A  B  B  B"#JKKK #i..//*
*$$    c           
      N   d}d}d}t          |           D ]\  }}|rq|r||z  }d}|dk    rd}|dk    rR|t          |           dz
  k    r:t          dd                    d	 | |dz   d          D                       z              n||z  }x|d
k    r	|dk    rd}||z  }||fS )NFr   r   Tr    r   z,Extra character(s) found after close quote: , c              3   4   K   | ]}t          |          V  d S Nsafe_character_display.0r)   s     r+   	<genexpr>z=split_email.<locals>.unquote_quoted_string.<locals>.<genexpr>   s-      :k:kYZ;QRS;T;T:k:k:k:k:k:kr-   r   )r!   r$   r   join)r   quotedr&   valuer(   r)   s         r+   unquote_quoted_stringz*split_email.<locals>.unquote_quoted_strings   s   
 dOO 	 	DAq  QJE#GG$YY"GG#XXCIIM))./]15:k:k^bcdghchcici^j:k:k:k1k1k0l m m mEQJEEaAHH
f}r-   )@<r<   c                 l    h | ]1}t          j        |          s|d k    s|dk    "t          |          2S ) .r
   matchr3   r4   s     r+   	<setcomp>zsplit_email.<locals>.<setcomp>   sM        q)) /03hh188 'q));C88r-   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   )r;   r;   )	strr   bool
startswithrstripr   r7   sortedcheck_unsafe_chars)r   r,   r:   r'   r*   display_namedisplay_name_quoted	bad_chars	addr_spec
local_partdomain_partis_quoted_local_parts               r+   split_emailrT      sX   H?%s ?%eCHo ?%RWX[]`X`Ra ?% ?% ?% ?%BC E#t),<    < =<UJOOIz S!! '8$$&&	 -B,A),L,L)) # 	N %  I
  N&'gjnjsjstz  |E  uF  uF  kG  kG  (G  JM  (M  N  N  N 	<T:::: j  "  $U  V  V  V&&s++
b>S  "#UVVV qrrN))#..	 #C"B9f"U"U
KK
 "+ZK
c"" &!!""o (='<Z'H'H$J$[2FFFr-   addrlimitc                 L    t          |           |z
  }|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$   )rU   rV   diffsuffixs       r+   get_length_reasonr^      s<    t99uD1HHSS"F1t11v1111r-   r)   c                 V   | dk    rd|  dS t          j        |           d         dv rt          |           S t          |           dk     r&dt          |           d                                }n%dt          |           d                                }t          j        | |          S )	Nr   r    r   LNPSi  zU+04x08x)r"   categoryreprorduppername)r)   hs     r+   r3   r3      s    DyyAzzzAq!%999Aww 1vvQ##%%Q##%% Aq!!!r-   c                   :    e Zd ZU eed<   ee         ed<   eed<   dS )LocalPartValidationResultrQ   ascii_local_partsmtputf8N)__name__
__module____qualname__rG   __annotations__r   rH    r-   r+   rn   rn      s2         OOOsm###NNNNNr-   rn   TFlocalallow_smtputf8allow_empty_localquoted_local_partstrictc                    t          |           dk    r|st          d          | | ddS |rAt          |           t          k    r)t          | t                    }t          d| d          t	          j        |           r| | ddS d}d}t          j        |           rY|sRd	 | D             }|r5t          d
d                    t          |                    z   dz             t          d          d}d}n|rd | D             }|r5t          dd                    t          |                    z   dz             d | D             }|r9d}|s5t          d
d                    t          |                    z   dz             d}|rzt          | |dk               	 | 
                    d           n"# t          $ r}	t          d          |	d}	~	ww xY w|dk    rdt          j        dd|           z   dz   } | |s| nd|dS d | D             }|r5t          dd                    t          |                    z   dz             t          | 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)rQ   ro   rp   rV   z0The email address is too long before the @-sign r?   Nc                 T    h | ]%}t          j        |          t          |          &S ru   r@   r4   s     r+   rB   z,validate_email_local_part.<locals>.<setcomp>"  s@       ~a((&q))  r-   zBInternationalized characters before the @-sign are not supported: r/   zAInternationalized characters before the @-sign are not supported.zdot-atomTc                 T    h | ]%}t          j        |          t          |          &S ru   )r   rA   r3   r4   s     r+   rB   z,validate_email_local_part.<locals>.<setcomp>:  sA     
 
 
#A&&
"1%%
 
 
r-   zKThe email address contains invalid characters in quotes before the @-sign: c                 d    h | ]-}d t          |          cxk    rdk    n t          |          .S )    ~   )ri   r3   r4   s     r+   rB   z,validate_email_local_part.<locals>.<setcomp>C  sO     
 
 
#a&&''''C'''' #1%%'''r-   r8   rC   utf8z0The email address contains an invalid character.r    z(["\\])z\\\1c                 T    h | ]%}t          j        |          t          |          &S ru   )r   rA   r3   r4   s     r+   rB   z,validate_email_local_part.<locals>.<setcomp>w  sA        &q))q!!  r-   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   rA   r	   r7   rK   rL   encode
ValueErrorresubcheck_dot_atom)
rv   rw   rx   ry   rz   reasonvalidrequires_smtputf8rO   es
             r+   validate_email_local_partr      s8    5zzQ  	Q"#OPPP
   %
 
 	
  ]#e**444"50EFFF[RX[[[\\\ 5!! 
   %
 
 	
  E&& 4 	h   I
  R&'knrnwnwx~  @I  yJ  yJ  oK  oK  (K  NQ  (Q  R  R  R ##fggg   
 

 

 
 
	
  	W"#psws|s|  ~D  EN  ~O  ~O  tP  tP  $P  SV  $V  W  W  W
 

 
 
	
  	R $ " R&'knrnwnwx~  @I  yJ  yJ  oK  oK  (K  NQ  (Q  R  R  R   
 	5u/@BBBB
	^LL     	^ 	^ 	^"#UVV\]]	^ H"&We<<<sBE  -> HD)
 
 	
   I
  Ibeienenouv  pA  pA  fB  fB   B  EH   H  I  I  	I 5D  GI  W\  ]  ]  ]  ] ]
^
^^s   F5 5
G?GGrX   rD   c           	      J   t                      }t          |           D ]\  }}t          j        |          }|d         dv r$|d         dk    r|dk    r|                    |           L|dk    r|s|                    |           j|d         dk    r|                    |           |d         dk    r|                    |           |                    |           |r?t          dd                    d	 t          |          D                       z   d
z             d S )Nr   r`   MZsZCz.The email address contains unsafe characters: r/   c              3   4   K   | ]}t          |          V  d S r1   r2   r4   s     r+   r6   z%check_unsafe_chars.<locals>.<genexpr>  s+      *`*`+A!+D+D*`*`*`*`*`*`r-   r?   )setr!   r"   rg   addr   r7   rK   )rX   rD   rO   r(   r)   rg   s         r+   rL   rL     sd    I! * *1'**A;...a[C
 Avva     !a   a[C
 MM!a[C MM! MM! hO!%*`*`fU^N_N_*`*`*`!`!` acf g h h 	hh hr-   labelstart_descr	end_descrr   c                    |                      d          r"t          |                    d                    |                     d          r"t          |                    d                    d| v rt          d          |r|                      d          r"t          |                    d                    |                     d          r"t          |                    d                    d| v sd| v rt          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   formatrI   )r   r   r   r   s       r+   r   r     s   ~~c ;y//99::: ={11(;;<<<u}}STTT m>># 	?"9#3#3H#=#=>>>C   	A";#5#5h#?#?@@@5==DEMM"#klllm m *Mr-   charc                    t          |           }d|cxk    rdk    rn ndS d|cxk    rdk    r"n nd|cxk    rdk    sn d|cxk    rd	k    r&n n#|d
v sd|cxk    rdk    sn d|cxk    rdk    rn ndS t          j        t          |                    dv rdS dt          j        t          |                                        d          v rdS dS )N      Fi   i`   i$   i&   i(   i.   )   id   i  i   i   i i T)CfCnCoCsr   ZlZp002Er>   )ri   r"   rg   chrdecompositionsplit)r   r)   s     r+   uts46_valid_charr     sE   
 	D		AqDuQ    &     &A*?*?*?*?*?*?*?*?&TUJ_J_J_J_Y_J_J_J_J_J_***q""""F""""$$$$W$$$$$ t		c!ff	%	%)S	S	S u	;,SVV44::3??	?	?u4r-   c                   $    e Zd ZU eed<   eed<   dS )DomainNameValidationResultascii_domaindomainN)rq   rr   rs   rG   rt   ru   r-   r+   r   r     s%         KKKKKr-   r   r   test_environmentglobally_deliverablec                    d | D             }|r5t          dd                    t          |                    z   dz             t          |            d | D             }|r5t          dd                    t          |                    z   dz             | }	 t	          j        | dd          } n+# t          j        $ r}t          d| d	          |d
}~ww xY wd | D             }|r5t          dd                    t          |                    z   dz             t          | ddd           |                     d          D ]1}t          j
        d|t          j                  rt          d          2t          j
        |           r| }n	 d                    d |                     d          D                       }n+# t          j        $ r}t          d| d	          |d
}~ww xY wt          j
        |          st          d          t          |          t          k    rf||k    r)t          |t                    }t          d| d          t          |          t          z
  }	|	dk    rdnd}
t          d|	 d|
 d          |                    d          D ]C}t          |          t           k    r)t          |t                     }t          d| d          D|r>d|vr|dk    r|st          d           t#          j        |          st          d!          dd"lm} |D ]8}|dk    r|r||k    s|                    d|z             rt          d#          9	 t	          j        |                    d$                    }n+# t          j        $ r}t          d%| d	          |d
}~ww xY wd& |D             }|r5t          dd                    t          |                    z   dz             t          |           	 t	          j        |           n+# t          j        $ r}t          d'| d	          |d
}~ww xY w||d(S ))z<Validates the syntax of the domain part of an email address.c                 T    h | ]%}t          j        |          t          |          &S ru   r   rA   r3   r4   s     r+   rB   z-validate_email_domain_name.<locals>.<setcomp>  A       "(++q!!  r-   z7The part after the @-sign contains invalid characters: r/   r?   c                 J    h | ] }t          |          t          |          !S ru   )r   r3   r4   s     r+   rB   z-validate_email_domain_name.<locals>.<setcomp>  s>       &'""q!!  r-   F)
std3_rulestransitionalz7The part after the @-sign contains invalid characters ().Nc                 T    h | ]%}t          j        |          t          |          &S ru   r   r4   s     r+   rB   z-validate_email_domain_name.<locals>.<setcomp>  r   r-   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 {}.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   d   K   | ]+}t          j        |                              d           V  ,dS )asciiN)idnaalabeldecode)r5   r   s     r+   r6   z-validate_email_domain_name.<locals>.<genexpr>G  sN       $ $ E""))'22$ $ $ $ $ $r-   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   rX   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                 T    h | ]%}t          j        |          t          |          &S ru   r   r4   s     r+   rB   z-validate_email_domain_name.<locals>.<setcomp>  r   r-   zXThe part after the @-sign became invalid after normalizing to international characters ()r   r   )r   r7   rK   rL   r   uts46_remap	IDNAErrorr   r   r   rA   Ir   r$   r   r^   r   r   searchr   r   r   r   r   )r   r   r   rO   original_domainr   r   r   r   r\   rX   r   ddomain_i18ns                 r+   validate_email_domain_namer     sQ   
   I
  X[_[d[dekluevev[w[wwz}}~~~ v +1  I  X[_[d[dekluevev[w[wwz}}~~~ Og!&UOOO> g g g^YZ^^^__effg
   I
  [tw{  xA  xA  BH  IR  BS  BS  xT  xT   T  WZ   Z  [  [  	[ 6\  _G  UY  Z  Z  Z  Z c"" g g8M5"$// 	g"  $f  g  g  g	g #F++ z	Z88 $ $#\\#..$ $ $  LL ~ 	Z 	Z 	Z"#QA#Q#Q#QRRXYY	Z &+L99 	z"#xyyy <,,,?**&|;LMMMF"#^U[#^#^#^___|$$'88DaiiSA"  $DVZ  $D  $Dab  $D  $D  $D  E  E  E ##C(( u uu::...&u4JKKKF"#sjp#s#s#sttt /  y l""LF,B,BGW,B"#efff !'55 	y"#wxxx +*****% B B;;+;1 5 5cAg > >"  $A  B  B  B ]k,"5"5g">">??> ] ] ]TqTTTUU[\\]   I
  X[_[d[dekluevev[w[wwz}}~~~{###HK    > H H Hz{  A  A  GH  	HH %  s`   B1 1C CC2G G,G''G,+'N N;"N66N;P& &Q5Q		Qaddrinfoc                 .   | j         d f| j        df| j        p| j        pddz   | j        z   dfg}|D ]\  }}t          |          }t          |                    d                    }|t          z
  }|dk    r|||k    rt          |t                    }nk|St          d |D                       }t          d	||z            }|d	k    rd
nd}	||k    r
d| d|	 d}n#d| d| d|	 d}n|d	k    rd
nd}	|d| d|	 dz  }t          d| d          d S )Nzafter normalizationr   r;   z9when the part after the @-sign is converted to IDNA ASCIIr   r   r|   c              3   Z   K   | ]&}t          |                    d                     V  'dS )r   N)r$   r   r4   s     r+   r6   z(validate_email_length.<locals>.<genexpr>  s6      ??Q3qxx//00??????r-   r   rX   rY   rZ   r[   r   z (r   zThe email address is too long r?   )original
normalizedro   rQ   r   r$   r   r   r^   maxr   )
r   addresses_to_checkrU   r   addr_lenaddr_utf8_lenr\   mbpcmcharsr]   s
             r+   validate_email_lengthr     s   2 
	D!		34

#
@x':
@bC	G(J_	_  b]  	^ + O Oft99DKK//00//!88~(m";"; +47GHHH ??$?????Q-- $qbT>>CCCCCCFFLLL$LL&LLLFF
 !%qb<t<<&<<<<"#MF#M#M#MNNN5 	O Or-   c                   H    e Zd ZU eej        ej        f         ed<   eed<   dS )DomainLiteralValidationResultdomain_addressr   N)	rq   rr   rs   r   	ipaddressIPv4AddressIPv6Addressrt   rG   ru   r-   r+   r   r     s5         )/1FFGGGGKKKKKr-   r   domain_literalc                 N   t          j        d|           rE	 t          j        |           }n&# t          $ r}t          d| d          |d }~ww xY w|d| ddS |                     d          rR	 t          j        | dd                    }n&# t          $ r}t          d	| d
          |d }~ww xY w|d|j         ddS d| vrt          d          d | D             }|r5t          dd	                    t          |                    z   dz             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                 T    h | ]%}t          j        |          t          |          &S ru   )r   rA   r3   r4   s     r+   rB   z0validate_email_domain_literal.<locals>.<setcomp>,  sA       #)!,,q!!  r-   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   rA   r   r   r   r   rI   r   
compressedr7   rK   )r   rU   r   rO   s       r+   validate_email_domain_literalr     s    
x~.. 

	k(88DD 	k 	k 	k"  $cxy  $c  $c  $c  d  d  jk  k	k
 #!$kkk
 
 	
   )) 
	p();<<DD 	p 	p 	p"#gbc#g#g#ghhnoo	p #1t111
 
 	
 .  }~~~   I
  Kdgkgpgpqw  yB  rC  rC  hD  hD   D  GJ   J  K  K  	K k
l
lls,   , 
AA

A1B 
B1B,,B1)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   rG   rH   rT   intr^   r3   rn   r   rL   r   r   r   r   r   r   r   ru   r-   r+   <module>r      s   ( ( ( ( ( ( ! ! ! ! ! !\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 
			          4 4 4 4 4 4 4 4 4 4 4 4xGs xGuXc]Cd%BC xG xG xG xGv2C 2 2 2 2 2 2"c "c " " " ""    	    bgNS^_ ^_S ^_$ ^_Z^ ^_15^_GK^_Xq^_ ^_ ^_ ^_B1h 1h# 1hD 1hT 1h 1h 1h 1hhm# mC mC md mW[ m m m m&3 4    <       
D Ds Dd Dbf D  sM D D D DN<ON <Ot <O <O <O <O~    I   
9m# 9m:W 9m 9m 9m 9m 9m 9mr-   