
    RPfk              	           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mZ ddlZddlZddlZddlZddlmZ d 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 Z 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QUOTED_LOCAL_PART_ADDR    N)Optionalc                     t        j                  |       x}r/|j                         \  }}t        j                  dd|      }||dfS | j                  d      }t        |      dk7  rt        d      |\  }}||dfS )Nz\\(.)z\1T@   z@The email address is not valid. It must have exactly one @-sign.F)r   matchgroupsresubsplitlenr   )emailm
local_partdomain_partpartss        P/var/www/fastapitest/venv/lib/python3.12/site-packages/email_validator/syntax.pysplit_emailr#      s     #((//q/"#((*
K
 VVHeZ8
;,, C u:?"#eff"'
K;--    Fc                 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))r   )addrutf8limitdiffprefixsuffixs         r"   get_length_reasonr/   *   s?    t9uD [bF1HS"FvhtfJvhj99r$   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_displayrB   2   s    DyA3bzAq!%99Aw 1vQ##%Q##% Aq!!r$   localallow_smtputf8allow_empty_localquoted_local_partc                 n   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
                  |       rj|sc| D ch c]"  }t        j
                  |      st        |      $ }}|r)t        d	d
j                  t        |            z   dz         t        d      d}d}n|r| D ch c]"  }t        j
                  |      st        |      $ }}|r)t        dd
j                  t        |            z   dz         | D ch c]#  }dt        |      cxk  rdk  sn t        |      % }}|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 | D ch c]"  }t)        j
                  |      st        |      $ }}|r)t        dd
j                  t        |            z   dz         t+        | ddd       t        d      c c}w c c}w c c}w # t"        $ r}	t        d      |	d}	~	ww xY wc c}w )z;Validates the syntax of the local part of an email address.r   z*There must be something before the @-sign.F)r   ascii_local_partsmtputf8r+   z0The email address is too long before the @-sign .NzBInternationalized characters before the @-sign are not supported: , zAInternationalized characters before the @-sign are not supported.zdot-atomTzKThe email address contains invalid characters in quotes before the @-sign:     ~   quotedNFC)allow_spacer*   z0The email address contains an invalid character.r2   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   r   r   r	   rB   joinsortedr   r=   r:   	normalizecheck_unsafe_charsencode
ValueErrorr   r   r
   check_dot_atom)
rC   rD   rE   rF   reasonvalidrequires_smtputf8r@   	bad_charses
             r"   validate_email_local_partr`   C   s    5zQ "#OPP
   %
 	
 5z))"50EF!QRXQYYZ[\\ 5!   %
 	
  E& ~~a( 'q)I 
 &'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   %%eU3 	5u/@B
	^LL  H"&&We<<sBE  ->)
 	
DH)
 	
 ""1% 	q!I 
 beienenouv  pA  fB   B  EH   H  I  	I 5D  GI  W\  ] ]
^^O0

D  	^"#UV\]]	^,s0   'J8'J(JJ 'J2	J/J**J/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k(  r|j	                  |       |j	                  |        |r0t        ddj                  d	 t        |      D              z   d
z         y )Nr   r3   MZsZCz.The email address contains unsafe characters: rL   c              3   2   K   | ]  }t        |        y w)N)rB   ).0r@   s     r"   	<genexpr>z%check_unsafe_chars.<locals>.<genexpr>  s     *`+A!+D*`s   rK   )set	enumerater:   r;   addr   rT   rU   )r'   rQ   r^   ir@   r;   s         r"   rW   rW      s    I! *1''*A;..a[C
 Ava  a a[C
 MM!a[C 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 )
NrK   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_descrrS   s       r"   rZ   rZ     s    ~~cy//9::{11(;<<u}STT>>#"9#3#3H#=>>C ";#5#5h#?@@5=DEM"#kll * r$   c                    | D ch c]"  }t        j                  |      st        |      $ }}|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| }nG	 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|j5                  d|
z         s%t        d       	 t        j                   |j                  d            }| D ch c]"  }t        j                  |      st        |      $ }}|r)t        ddj	                  t        |            z   dz         t        |        ||dS c c}w # 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c c}w )z<Validates the syntax of the domain part of an email address.z7The part after the @-sign contains invalid characters: rL   rK   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 {}.TrR   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.rJ   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 ()ascii_domaindomain)r   r   rB   r   rT   rU   rW   idnauts46_remap	IDNAErrorrZ   r   r   Ir   rX   decodestrr   r   r/   r   r   searchr&   r~   rq   )r   test_environmentglobally_deliverabler@   r^   r_   rt   r   r[   r~   ddomain_i18ns               r"   validate_email_domain_namer   /  s    "((+ 	q!I 
 X[_[d[dekluev[wwz}}~~ vg!!&UO 6\  _G  UY  Z c" g88M5"$$/"  $f  g  gg ##F+"	k;;vU;BB7KL &++L9"#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]kk,"5"5g">? "((+ 	q!I 
 X[_[d[dekluev[wwz}}~~v % s. >> g!XYZX[[]^_effgN ~~ 
	k CF*
 ''XY_`` #%\]^\__a#bcijj
	kN >> ]!NqcQSTU[\\]
sS   'J)%J. +&K $L 'M.KKKL,)LLM0M  Mc                    | j                   rt        | j                         t        kD  rt| j                   | j                  k(  rt	        | j                         }n6t        | j                        t        kD  rt	        | j                  d      }nd}t        d| d      t        | j                  j                  d            t        kD  rEt        | j                        t        kD  rt	        | j                  d      }nd}t        d| d      y )NT)r*   z(when converted to IDNA ASCII)zThe email address is too long rK   r*   z(when encoded in bytes))ascii_emailr   r   
normalizedr/   r   rX   )addrinfor[   s     r"   validate_email_lengthr     s     H$8$8 9<L L8#6#66&x';';<F$$%(88 'x':':FF5F!?xqIJJ 8%%f-.1AAx""#&66 'x':':FF.F!?xqIJJ Br$   c                 X   t        j                  d|       r	 t        j                  |       }|d| ddS | j                  d      r,	 t        j                  | dd        }|d|j                   ddS d| vrt        d      | D ch c]"  }t        j                  |      st        |      $ }}|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c c}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.[])domain_addressr   zIPv6:   z<The IPv6 address in brackets after the @-sign is not valid (rz   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: rL   rK   zNThe part after the @-sign contains an invalid address literal tag in brackets.)r   r   	ipaddressIPv4AddressrY   r   rs   IPv6Address
compressedr   rB   rT   rU   )domain_literalr)   r_   r@   r^   s        r"   validate_email_domain_literalr     s    
xx~.	k((8D #$qk
 	
   )	p(();<D #t/q1
 	
 . }~~  #))!, 	q!I 
 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*s5   C% D '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   r   r   r:   r   r   typingr   r#   r/   rB   r   boolr`   rW   rZ   r   r   r    r$   r"   <module>r      s    .   
 
    .8 "'.> :"" bg8=b_S b_$ b_Z^ b_15b_J1hhm&aH&KR7mr$   