
    hlV                        S SK r S SKJrJrJrJrJrJr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JrJr  S SKJr  S SKJrJr  S SKJ r J!r!  \(       a9  S SK"q"S SK#J$r$  S SK%J&r&  S S	K'J(r(  S S
K)J*r*  \\*SS4   r+ " S S\$SS9r, " S S\$SS9r-OSq" " S S\.5      r,\\/\0\1\\\/\0\14   \\/\14   4   4   r2/ SQr3Sq4Sq5Sq6Sq7Sq8Sr9Sr:Sr;Sr<Sr=Sr>S\\/   4S jr?S\\/   4S jr@S\\/   4S jrAS\\/   4S jrBS\\/   4S jrC " S S \/5      rD " S! S"\D5      rE " S# S$\E5      rF " S% S&\D5      rG " S' S(\D5      rH " S) S*\H5      rI " S+ S,\D5      rJ " S- S.\D5      rK " S/ S0\D5      rL " S1 S2\D5      rM " S3 S4\D5      rNS5S6S7S5S5SS8.S9\OS:\1S;\1S<\OS=\OS>\\\/      S\\D   4S? jjrPSOS@ jrQ " SA SB\/5      rR " SC SD\5      rS " SE SF\5      rT " SG SH\5      rU " SI SJ\	5      rV\ R                  " SK5      rXSLrY SM\\/   S\\/\/4   4SN jrZg)P    N)IPv4AddressIPv4InterfaceIPv4NetworkIPv6AddressIPv6InterfaceIPv6Network_BaseAddress_BaseNetwork)TYPE_CHECKINGAny
CollectionDict	GeneratorListMatchOptionalPatternSetTupleTypeUnioncastno_type_check)errors)Representationupdate_not_none)constr_length_validatorstr_validator)	TypedDict)
BaseConfig)
ModelField)AnyCallablec                       \ rS rSr% \\S'   \\   \S'   \\   \S'   \\   \S'   \\   \S'   \\   \S'   \\   \S'   \\   \S	'   \\   \S
'   \\   \S'   Srg)Parts,   schemeuserpasswordipv4ipv6domainportpathqueryfragment N)__name__
__module____qualname____firstlineno__str__annotations__r   __static_attributes__r0       F/var/www/html/env/lib/python3.13/site-packages/pydantic/v1/networks.pyr$   r$   ,   sa    sm3-smsmsmsm}3-r8   r$   F)totalc                   Z    \ rS rSr% \\S'   \\   \S'   \\   \S'   \\   \S'   \\S'   Srg)		HostParts8   hosttld	host_typer,   rebuildr0   N)	r1   r2   r3   r4   r5   r6   r   boolr7   r0   r8   r9   r<   r<   8   s*    	c]C= smr8   r<   c                       \ rS rSrSrg)r$   B   r0   N)r1   r2   r3   r4   r7   r0   r8   r9   r$   r$   B   s    r8   )AnyUrl
AnyHttpUrlFileUrlHttpUrl	stricturlEmailStr	NameEmailIPvAnyAddressIPvAnyInterfaceIPvAnyNetworkPostgresDsnCockroachDsnAmqpDsnRedisDsnMongoDsnKafkaDsnvalidate_emailz(?:(?P<ipv4>(?:\d{1,3}\.){3}\d{1,3})(?=$|[/:#?])|(?P<ipv6>\[[A-F0-9]*:[A-F0-9:]+\])(?=$|[/:#?])|(?P<domain>[^\s/:?#]+))?(?::(?P<port>\d+))?z&(?:(?P<scheme>[a-z][a-z0-9+\-.]+)://)?z3(?:(?P<user>[^\s:/]*)(?::(?P<password>[^\s/]*))?@)?z(?P<path>/[^\s?#]*)?z(?:\?(?P<query>[^\s#]*))?z(?:#(?P<fragment>[^\s#]*))?returnc                      [         cI  [        R                  " [         [         [
         [         [         [         3[        R                  5      q [         $ N)
_url_regex_cacherecompile_scheme_regex_user_info_regex_host_regex_path_regex_query_regex_fragment_regex
IGNORECASEr0   r8   r9   	url_regexrc   q   sF    ::/0k]<.YhXijMM
 r8   c                      [         cD  [        R                  " [         [         S[
         [         [         3[        R                  5      q [         $ )z
Compiled multi host url regex.

Additionally to `url_regex` it allows to match multiple hosts.
E.g. host1.db.net,host2.db.net
z(?P<hosts>([^/]*)))	_multi_host_url_regex_cacherZ   r[   r\   r]   r_   r`   ra   rb   r0   r8   r9   multi_host_url_regexrf   {   sK     #*&(jj/0!}\N?*;= MM	'
# '&r8   c                  ~    [         c1  Sn Sn[        R                  " SU  SU  U 3[        R                  5      q [         $ )Nz'[_0-9a-z](?:[-_0-9a-z]{0,61}[_0-9a-z])?z(?P<tld>\.[a-z]{2,63})?\.?(?:\.)*?)_ascii_domain_regex_cacherZ   r[   rb   )ascii_chunkascii_domain_endings     r9   ascii_domain_regexrm      sF     (@;$&JJ;-u[M2E1FG%
! %$r8   c                  ~    [         c1  Sn Sn[        R                  " SU  SU  U 3[        R                  5      q [         $ )NzB[_0-9a-\U00040000](?:[-_0-9a-\U00040000]{0,61}[_0-9a-\U00040000])?z<(?P<tld>(\.[^\W\d_]{2,63})|(\.(?:xn--)[_0-9a-z-]{2,63}))?\.?rh   ri   )_int_domain_regex_cacherZ   r[   rb   )	int_chunkint_domain_endings     r9   int_domain_regexrr      sD    &Y	["$**I;eI;O`Na-bdfdqdq"r""r8   c                  n    [         c)  [        R                  " [        [        R                  5      q [         $ rX   )_host_regex_cacherZ   r[   r^   rb   r0   r8   r9   
host_regexru      s)     JJMM
 r8   c                     ^  \ rS rSr% SrSrSrSr\\	\
      \S'   Sr\\S'   Sr\\S	'   Sr\\S
'   \" 5       r\\
   \S'   Sr\S\\
   S\4S j5       rSSSSSSSSSS.	S\
S\
S\\
   S\\
   S\\
   S\\
   S\
S\\
   S\\
   S\\
   S\\
   SS4S jjr\SSSSSSS.S\
S\\
   S\\
   S\
S\\
   S\\
   S\\
   S\\
   S\
S\
4S jj5       r\S \\
\4   SS4S! j5       r\S6S" j5       r\S#\S$S%S&S'SS 4S( j5       r\S)\\
   S\
S*S+SS 4S, j5       r \!S\
S\\\
      4S- j5       r"\!S\\
   SS4S. j5       r#\S7S*S+S/\SS+4S0 jj5       r$\S*S+S\%\
\\
   \
\4   4S1 j5       r&\!S8S2 j5       r'\S8S3 j5       r(S\
4U 4S4 jjr)S5r*U =r+$ )9rE      T      Nallowed_schemesFtld_requireduser_requiredhost_requiredhidden_parts
r&   r'   r(   r>   r?   r@   r,   r-   r.   r/   urlrV   c                 ^    [         R                  Xc  U R                  " S0 UD65      $ U5      $ )Nr0   )r5   __new__build)clsr   kwargss      r9   r   AnyUrl.__new__   s)    {{3{		 3F 3LLLLr8   r+   )	r'   r(   r>   r?   r@   r,   r-   r.   r/   r&   r'   r(   r>   r?   r@   r,   r-   r.   r/   c       
             [         R                  U5        X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl	        Xl
        Xl        g rX   )r5   __init__r&   r'   r(   r>   r?   r@   r,   r-   r.   r/   )selfr   r&   r'   r(   r>   r?   r@   r,   r-   r.   r/   s               r9   r   AnyUrl.__init__   sB     	S	 	"		
 r8   )r'   r(   r,   r-   r.   r/   _kwargsc                r   [        SUUUUUUUUS.U	D6n
US-   nU(       a  X-  nU(       a  USU-   -  nU(       d  U(       a  US-  nX-  nU(       a<  SU R                  ;  d$  U R                  U
5      R                  S5      U:w  a  USU-   -  nU(       a  X-  nU(       a  USU-   -  nU(       a  USU-   -  nU$ )	N)r&   r'   r(   r>   r,   r-   r.   r/   z://:@r,   ?#r0   )r$   r~   get_default_partsget)r   r&   r'   r(   r>   r,   r-   r.   r/   r   partsr   s               r9   r   AnyUrl.build   s      



 

 unKC3>!C83JCV3#3#33s7L7LU7S7W7WX^7_cg7g3:CKC3;C3>!C
r8   field_schemac                 B    [        XR                  U R                  SS9  g )Nuri)	minLength	maxLengthformat)r   
min_length
max_lengthr   r   s     r9   __modify_schema__AnyUrl.__modify_schema__  s    #..afgr8   c              #   (   #    U R                   v   g 7frX   validater   s    r9   __get_validators__AnyUrl.__get_validators__       ll   valuefieldr!   configr    c                    UR                   U :X  a  U$ [        U5      nU R                  (       a  UR                  5       n[	        [
        [        XU5      5      nU R                  U5      nU(       d   S5       e[	        SUR                  5       5      nU R                  U5      nU R                  U5      nUR                  5       [        U5      :w  a$  [        R                  " XER                  5       S  S9eU R                  XTU5      $ )NzURL regex failed unexpectedlyr$   )extra)	__class__r   strip_whitespacestripr   r5   r   
_match_url	groupdictapply_default_partsvalidate_partsendlenr   UrlExtraError
_build_url)r   r   r   r   r   moriginal_partsr   s           r9   r   AnyUrl.validate
  s    ??c!Le$KKME4U6JKNN3111qgq{{}5''7""5)557c#h&&S^<<~~ae,,r8   r   r   r$   c                     U R                  U5      u  pEpgU " U(       a  SOUUS   US   US   UUUUS   US   US   US   S	9$ )
zt
Validate hosts and build the AnyUrl object. Split from `validate` so this method
can be altered in `MultiHostDsn`.
Nr&   r'   r(   r,   r-   r.   r/   r   )validate_host)r   r   r   r   r>   r?   r@   rA   s           r9   r   AnyUrl._build_url   si     ),(9(9%(@%9D?v:&vv.:&
 	
r8   c                 4    [        5       R                  U 5      $ rX   )rc   matchr   s    r9   r   AnyUrl._match_url6  s    {  %%r8   c                 T    U b%  [        U 5      S:  a  [        R                  " 5       eg g )Ni  )intr   UrlPortError)r,   s    r9   _validate_portAnyUrl._validate_port:  s*    D	F 2%%'' !3r8   validate_portc                    US   nUc  [         R                  " 5       eU R                  (       aG  UR                  5       U R                  ;  a)  [         R                  " [        U R                  5      5      eU(       a  U R                  US   5        US   nU R                  (       a  Uc  [         R                  " 5       eU$ )zj
A method used to validate parts of a URL.
Could be overridden to set default values for parts if missing
r&   r,   r'   )	r   UrlSchemeErrorrz   lowerUrlSchemePermittedErrorsetr   r|   UrlUserInfoError)r   r   r   r&   r'   s        r9   r   AnyUrl.validate_parts?  s     x>''))6<<>9L9L#L00S5H5H1IJJuV}-V}))++r8   c                    Su  p#nS H  nX   nU(       d  M  Un  O   Wc(  U R                   (       a  [        R                  " 5       eGO!US:X  Ga  Sn[        5       R	                  U5      nUc3  [        5       R	                  U5      nUc  [        R                  " 5       eSnUR                  S5      nUc8  U(       d1  [        5       R	                  U5      nUc   eUR                  S5      nSnUb  USS  nO&U R                  (       a  [        R                  " 5       eU(       aG  SnSnUR                  S	5      R                  S
5      nUb   UR                  S	5      R                  S
5      nXbX44$ )N)NNF)r+   r)   r*   r+   FTr?   rx   
int_domainidnaascii)r}   r   UrlHostErrorrm   	fullmatchrr   groupr{   UrlHostTldErrorencodedecode)	r   r   r?   r@   rA   fr>   is_internationalds	            r9   r   AnyUrl.validate_hostU  s]   "3+A8Dt		 , <  ))++ !("$"$..t4Ay$&0069 --//#' ''%.C{#3$&006}$}ggen#' !"g!!,,..(	{{6*11':?**V,33G<C),,r8   c                     0 $ rX   r0   r   s    r9   r   AnyUrl.get_default_parts  s    	r8   c                 t    U R                  U5      R                  5        H  u  p#X   (       a  M  X1U'   M     U$ rX   )r   items)r   r   keyr   s       r9   r   AnyUrl.apply_default_parts  s7    //6<<>JC::"c
 ? r8   c                    >^  SR                  U 4S jT R                   5       5      nT R                  R                   S[        TT ]  5        SU S3$ )Nz, c              3   f   >#    U  H&  n[        TU5      c  M  U S[        TU5      < 3v   M(     g 7f)N=)getattr).0nr   s     r9   	<genexpr>"AnyUrl.__repr__.<locals>.<genexpr>  s3     n~!QXY]_`Qa5QCqq!1 45~s   11())join	__slots__r   r1   super__repr__)r   r   r   s   ` r9   r   AnyUrl.__repr__  sH    		nt~~nn..))*!EG,<,>+?r%JJr8   )
r/   r>   r@   r(   r-   r,   r.   r&   r?   r'   rV   CallableGeneratorTr   r$   rV   r$   ),r1   r2   r3   r4   r   r   r   rz   r   r   r5   r6   r{   rB   r|   r}   r   r~   r   r   r   objectr   r   classmethodr   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r7   __classcell__r   s   @r9   rE   rE      sp   JJ15OXjo.5L$M4M4 UL#c("oIM(3- Mf M M #"&"!!""#"&!! 	!
 sm! 3-! sm! c]! ! sm! sm! }! 3-! 
!6 
 #"&""#"&) ) sm	)
 3-) ) sm) sm) }) 3-) ) 
) )V hT#s(^ h h h   -S - -| -PX - -* 
5: 
C 
 
H 
 
* & &s 4 & & (Xc] (t ( ( 7 4 7  * '-' '-eC#T4Q.R '- '-R    K# K Kr8   rE   c                        \ rS rSrSS1rSrSrg)rF   i  httphttpsr0   N)r1   r2   r3   r4   rz   r   r7   r0   r8   r9   rF   rF     s    w'OIr8   rF   c                   6    \ rS rSrSrSrS1r\SS j5       rSr	g)	rH   i  Ti#  r,   c                 "    SU S   S:X  a  S0$ S0$ )Nr,   r&   r   80443r0   r   s    r9   r   HttpUrl.get_default_parts  s     h6 9EEuEEr8   r0   Nr   )
r1   r2   r3   r4   r{   r   r~   r   r   r7   r0   r8   r9   rH   rH     s'    LJ8LF Fr8   rH   c                   "    \ rS rSrS1rSrSrSrg)rG   i  fileFr0   N)r1   r2   r3   r4   rz   r}   r   r7   r0   r8   r9   rG   rG     s    hOMIr8   rG   c            	          ^  \ rS rSr\R
                  S-   rSS.S\S\\S      S\4U 4S jjjr	\
S	\S
\\\      4S j5       r\SSSS\S
S4U 4S jjj5       r\S\\   S	\SSS
S 4S j5       rSrU =r$ )MultiHostDsni  )hostsNargsr  r<   r   c                2   > [         TU ]  " U0 UD6  Xl        g rX   )r   r   r  )r   r  r	  r   r   s       r9   r   MultiHostDsn.__init__  s    $)&)
r8   r   rV   c                 4    [        5       R                  U 5      $ rX   )rf   r   r   s    r9   r   MultiHostDsn._match_url  s    #%++C00r8   r   r$   r   c                     > [         TU ]  USS9$ )NF)r   )r   r   )r   r   r   r   s      r9   r   MultiHostDsn.validate_parts  s    w%e5%AAr8   r   c                    / n[        5       nUR                  5       S   R                  S5       Ho  nUR                  U5      R                  5       nU R	                  U5      u  phpUR                  S5      nU R                  U5        UR                  UU	UU
US.5        Mq     [        U5      S:  aE  U " [        U Vs/ s H  oS   PM	     sn5      (       a  S OUUS   US   US	   US
   US   US   S US9	$ US   nU " US   (       a  S OUUS   US   US	   US   US   US   UR                  S5      US
   US   US   S9$ s  snf )Nr  ,r,   )r>   r@   r?   rA   r,   rx   rA   r&   r'   r(   r-   r.   r/   )r&   r'   r(   r-   r.   r/   r@   r  r   r>   r?   r@   r   )
ru   r   splitr   r   r   r   appendr   any)r   r   r   r   hosts_partshost_rer>   r   r?   r@   rA   r,   hp	host_parts                 r9   r   MultiHostDsn._build_url  s   )+,KKM'*005D}}T*446A,/,=,=a,@)Dy55=Dt$ !*&  6 {a[A[r	][ABBX6]z*6]Gnz*!
 
 $AI!),#X6]z*v&e$#K0]]6*6]Gnz*  Bs   <Er   )r1   r2   r3   r4   rE   r   r   r   r   r   r   r5   r   r   r   rB   r   r   r7   r   r   s   @r9   r  r    s      :-IHL c (43D*E X[   1 1s 4 1 1 B7 B4 B7 B B -5: -C - -N - -r8   r  c                   $    \ rS rSr1 SkrSrSrSrg)rO   i  >	   postgres
postgresqlpostgresql+pg8000postgresql+asyncpgpostgresql+psycopgpostgresql+psycopg2postgresql+pygresqlpostgresql+psycopg2cffipostgresql+py-postgresqlTr0   N)r1   r2   r3   r4   rz   r|   r   r7   r0   r8   r9   rO   rO     s    
O MIr8   rO   c                        \ rS rSr1 SkrSrSrg)rP   i  >   cockroachdbcockroachdb+asyncpgcockroachdb+psycopg2Tr0   N)r1   r2   r3   r4   rz   r|   r7   r0   r8   r9   rP   rP     s    O
 Mr8   rP   c                        \ rS rSrSS1rSrSrg)rQ   i  amqpamqpsFr0   N)r1   r2   r3   r4   rz   r}   r7   r0   r8   r9   rQ   rQ     s    w'OMr8   rQ   c                   8    \ rS rSrSrSS1rSr\SS j5       rSr	g)	rR   i  r0   redisredissFc                 :    U S   (       d  U S   (       d  SOSSSS.$ )Nr)   r*   	localhost 6379z/0)r+   r,   r-   r0   r   s    r9   r   RedisDsn.get_default_parts  s%     +0-5=kr
 	
r8   Nr   )
r1   r2   r3   r4   r   rz   r}   r   r   r7   r0   r8   r9   rR   rR     s(    I)OM
 
r8   rR   c                   .    \ rS rSrS1r\SS j5       rSrg)rS   i  mongodbc                 
    SS0$ )Nr,   27017r0   r   s    r9   r   MongoDsn.get_default_parts  s     G
 	
r8   r0   Nr   r1   r2   r3   r4   rz   r   r   r7   r0   r8   r9   rS   rS     s     kO 
 
r8   rS   c                   .    \ rS rSrS1r\SS j5       rSrg)rT   i  kafkac                     SSS.$ )Nr/  9092)r+   r,   r0   r   s    r9   r   KafkaDsn.get_default_parts"  s     "
 	
r8   r0   Nr   r8  r0   r8   r9   rT   rT     s    iO
 
r8   rT   Trx   ry   r   r   r   r{   r}   rz   r   r   r   r{   r}   rz   c           	      B    [        U UUUUUS9n[        S[        4U5      $ )Nr>  UrlValue)dicttyperE   )r   r   r   r{   r}   rz   	namespaces          r9   rI   rI   *  s3     )!#'I 
VIy11r8   c                  J     SS K q g ! [         a  n [        S5      U eS n A ff = f)Nr   zCemail-validator is not installed, run `pip install pydantic[email]`)email_validatorImportError)es    r9   import_email_validatorrH  ?  s,    h h_`fgghs    
""c                   p    \ rS rSr\S\\\4   SS4S j5       r\S
S j5       r	\S\
\   S\4S j5       rS	rg)rJ   iG  r   rV   Nc                 $    UR                  SSS9  g )NstringemailrB  r   updater   s     r9   r   EmailStr.__modify_schema__H  s    ':r8   c              #   L   #    [        5         [        v   U R                  v   g 7frX   )rH  r   r   r   s    r9   r   EmailStr.__get_validators__L  s      	 lls   "$r   c                     [        U5      S   $ )Nrx   )rU   r   r   s     r9   r   EmailStr.validateT  s    e$Q''r8   r0   r   )r1   r2   r3   r4   r   r   r5   r   r   r   r   r   r7   r0   r8   r9   rJ   rJ   G  sd    ;T#s(^ ; ; ;   (U3Z (C ( (r8   rJ   c                       \ rS rSrSrS\S\4S jrS\S\4S jr	\
S	\\\4   SS
4S j5       r\
SS j5       r\
S\SS 4S j5       rS\4S jrSrg
)rK   iY  namerL  rX  rL  c                     Xl         X l        g rX   rW  )r   rX  rL  s      r9   r   NameEmail.__init__\  s    	
r8   otherrV   c                     [        U[        5      =(       a1    U R                  U R                  4UR                  UR                  4:H  $ rX   )
isinstancerK   rX  rL  )r   r[  s     r9   __eq__NameEmail.__eq__`  s6    %+dDJJ0GEJJX]XcXcKd0ddr8   r   Nc                 $    UR                  SSS9  g )NrK  z
name-emailrM  rN  r   s     r9   r   NameEmail.__modify_schema__c  s    ,?r8   c              #   <   #    [        5         U R                  v   g 7frX   )rH  r   r   s    r9   r   NameEmail.__get_validators__g  s      lls   r   c                 X    UR                   U :X  a  U$ [        U5      nU " [        U5      6 $ rX   )r   r   rU   rT  s     r9   r   NameEmail.validatem  s-    ??c!Le$N5)**r8   c                 :    U R                    SU R                   S3$ )Nz <>rW  )r   s    r9   __str__NameEmail.__str__t  s    ))Btzzl!,,r8   )rL  rX  r   )r1   r2   r3   r4   r   r5   r   r   rB   r^  r   r   r   r   r   rh  r7   r0   r8   r9   rK   rK   Y  s    IS  eC eD e @T#s(^ @ @ @  
 +S +[ + +- -r8   rK   c                       \ rS rSrSr\S\\\4   SS4S j5       r	\S
S j5       r
\S\\\\4   S\\\4   4S	 j5       rSrg)rL   ix  r0   r   rV   Nc                 $    UR                  SSS9  g )NrK  ipvanyaddressrM  rN  r   s     r9   r   IPvAnyAddress.__modify_schema__{      /Br8   c              #   (   #    U R                   v   g 7frX   r   r   s    r9   r    IPvAnyAddress.__get_validators__  r   r   r   c                      [        U5      $ ! [         a     Of = f [        U5      $ ! [         a    [        R                  " 5       ef = frX   )r   
ValueErrorr   r   IPvAnyAddressErrorrT  s     r9   r   IPvAnyAddress.validate  sR    	u%% 			.u%% 	.++--	.   
 

)  A	r   )r1   r2   r3   r4   r   r   r   r5   r   r   r   r   bytesr   r   r   r   r7   r0   r8   r9   rL   rL   x  s~    ICT#s(^ C C C   	.U3s?3 	.k;>V8W 	. 	.r8   rL   c                   x    \ rS rSrSr\S\\\4   SS4S j5       r	\S
S j5       r
\S\S\\\4   4S	 j5       rSrg)rM   i  r0   r   rV   Nc                 $    UR                  SSS9  g )NrK  ipvanyinterfacerM  rN  r   s     r9   r   !IPvAnyInterface.__modify_schema__  s    2CDr8   c              #   (   #    U R                   v   g 7frX   r   r   s    r9   r   "IPvAnyInterface.__get_validators__  r   r   r   c                      [        U5      $ ! [         a     Of = f [        U5      $ ! [         a    [        R                  " 5       ef = frX   )r   rr  r   r   IPvAnyInterfaceErrorrT  s     r9   r   IPvAnyInterface.validate  sR    	 '' 			0 '' 	0--//	0ru  r   )r1   r2   r3   r4   r   r   r   r5   r   r   r   NetworkTyper   r   r   r   r7   r0   r8   r9   rM   rM     ss    IET#s(^ E E E   	0[ 	0U=-3O-P 	0 	0r8   rM   c                   t    \ rS rSr\S\\\4   SS4S j5       r\S
S j5       r	\S\
S\\\4   4S j5       rS	rg)rN   i  r   rV   Nc                 $    UR                  SSS9  g )NrK  ipvanynetworkrM  rN  r   s     r9   r   IPvAnyNetwork.__modify_schema__  rn  r8   c              #   (   #    U R                   v   g 7frX   r   r   s    r9   r    IPvAnyNetwork.__get_validators__  r   r   r   c                      [        U5      $ ! [         a     Of = f [        U5      $ ! [         a    [        R                  " 5       ef = frX   )r   rr  r   r   IPvAnyNetworkErrorrT  s     r9   r   IPvAnyNetwork.validate  sR    	u%% 			.u%% 	.++--	.ru  r0   r   )r1   r2   r3   r4   r   r   r5   r   r   r   r  r   r   r   r   r7   r0   r8   r9   rN   rN     sn    CT#s(^ C C C   .[ .U;3K-L . .r8   rN   z([\w ]*?) *<(.*)> *i   r   c                 \   [         c
  [        5         [        U 5      [        :  a  [        R
                  " 5       e[        R                  U 5      nSnU(       a  UR                  5       u  p U R                  5       n [         R                  " USS9n[        US5      (       a)  UR                  nUc   eU=(       d    UR                  nX#4$ UR                  S5      nUSU nX6S R!                  5       nU=(       d    UXx-   4$ ! [         R                   a  n[        R
                  UeSnAff = f)a0  
Email address validation using https://pypi.org/project/email-validator/
Notes:
* raw ip address (literal) domain parts are not allowed.
* "John Doe <local_part@domain.com>" style "pretty" email addresses are processed
* spaces are striped from the beginning and end of addresses but no error is raised
NF)check_deliverability
normalizedr   )rE  rH  r   MAX_EMAIL_LENGTHr   
EmailErrorpretty_email_regexr   groupsr   rU   EmailNotValidErrorhasattrr  
local_partindexr   )	r   r   rX  rL  r   rG  at_indexr  global_parts	            r9   rU   rU     s     
5z$$!!$$U+A!DhhjKKME'..u5Q ul##     'u''{ ;;s#9H%
I&,,.!z:#;;; -- 'Q&'s   ;D D+D&&D+)rV   N)[rZ   	ipaddressr   r   r   r   r   r   r	   r
   typingr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pydantic.v1r   pydantic.v1.utilsr   r   pydantic.v1.validatorsr   r   rE  typing_extensionsr   pydantic.v1.configr    pydantic.v1.fieldsr!   pydantic.v1.typingr"   r   r$   r<   rA  r5   rv  r   r  __all__rY   re   rj   ro   rt   r^   r\   r]   r_   r`   ra   rc   rf   rm   rr   ru   rE   rF   rH   rG   r  rO   rP   rQ   rR   rS   rT   rB   rI   rH  rJ   rK   rL   rM   rN   r[   r  r  rU   r0   r8   r9   <module>r     s   		 	 	    $  = I+--.!+tT"9:
 	 
 IU  O  CU5eS+A5c?+R%SST(  "       :I %+073< 'gcl '$%GCL %#'#, #GCL aKS aKH Fj Ff =6 =@, "6 f 

v 

v 

v 
 "1522 2 	2
 2 2 jo.2 
&\2*h(s ($- ->.L .00l 00.L .0 ZZ 67  
$<%* $<sCx $<r8   