
    bMhlV                        d dl Z d dlmZmZmZmZmZmZmZ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mZ d dlmZ d dlmZmZ d dlm Z m!Z! erHd dl"a"d dl#m$Z$ d dl%m&Z& d d	l'm(Z( d d
l)m*Z* ee*ddf         Z+ G d de$d          Z, G d de$d          Z-nda" G d de.          Z,ee/e0e1eee/e0e1f         ee/e1f         f         f         Z2g dZ3da4da5da6da7da8dZ9dZ:dZ;dZ<dZ=dZ>dee/         fdZ?dee/         fdZ@dee/         fdZAdee/         fdZBdee/         fdZC G d d e/          ZD G d! d"eD          ZE G d# d$eE          ZF G d% d&eD          ZG G d' d(eD          ZH G d) d*eH          ZI G d+ d,eD          ZJ G d- d.eD          ZK G d/ d0eD          ZL G d1 d2eD          ZM G d3 d4eD          ZNd5d6d7d5d5dd8d9eOd:e1d;e1d<eOd=eOd>eee/                  deeD         fd?ZPdOd@ZQ G dA dBe/          ZR G dC dDe          ZS G dE dFe          ZT G dG dHe          ZU G dI dJe	          ZV e jW        dK          ZXdLZY	 dMee/         dee/e/f         fdNZZdS )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                       e Zd ZU eed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed<   ee         ed	<   ee         ed
<   dS )Partsschemeuserpasswordipv4ipv6domainportpathqueryfragmentN)__name__
__module____qualname__str__annotations__r        T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pydantic/v1/networks.pyr$   r$   ,   s         sm3-smsmsmsm}3-r5   r$   F)totalc                   f    e Zd ZU eed<   ee         ed<   ee         ed<   ee         ed<   eed<   dS )	HostPartshosttld	host_typer+   rebuildN)r/   r0   r1   r2   r3   r   boolr4   r5   r6   r9   r9   8   sR         			c]C=   smr5   r9   c                       e Zd ZdS )r$   N)r/   r0   r1   r4   r5   r6   r$   r$   B   s        r5   )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                      t           It          j        t           t           t
           t           t           t           t          j	                  a t           S N)
_url_regex_cacherecompile_scheme_regex_user_info_regex_host_regex_path_regex_query_regex_fragment_regex
IGNORECASEr4   r5   r6   	url_regexr^   q   sK    :j/jjkj<jYhjjM
 
 r5   c                      t           Ct          j        t           t           dt
           t           t           t          j                  a t           S )z
    Compiled multi host url regex.

    Additionally to `url_regex` it allows to match multiple hosts.
    E.g. host1.db.net,host2.db.net
    Nz(?P<hosts>([^/]*)))	_multi_host_url_regex_cacherU   rV   rW   rX   rZ   r[   r\   r]   r4   r5   r6   multi_host_url_regexra   {   s]     #*&(j =/ = ==)=+:= = M	'
 '
# '&r5   c                  t    t           +d} d}t          j        d|  d|  | t          j                  a t           S )Nz'[_0-9a-z](?:[-_0-9a-z]{0,61}[_0-9a-z])?z(?P<tld>\.[a-z]{2,63})?\.?(?:\.)*?)_ascii_domain_regex_cacherU   rV   r]   )ascii_chunkascii_domain_endings     r6   ascii_domain_regexrh      sJ     (@;$&JG;GG[G2EGG%
 %
! %$r5   c                  t    t           +d} d}t          j        d|  d|  | t          j                  a t           S )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}))?\.?rc   rd   )_int_domain_regex_cacherU   rV   r]   )	int_chunkint_domain_endings     r6   int_domain_regexrm      sF    &Y	["$*-bI-b-bI-bO`-b-bdfdq"r"r""r5   c                  f    t           $t          j        t          t          j                  a t           S rS   )_host_regex_cacherU   rV   rY   r]   r4   r5   r6   
host_regexrp      s*     JM
 
 r5   c                       e Zd ZU dZdZdZdZeee	                  e
d<   dZee
d<   dZee
d<   dZee
d	<    e            Zee	         e
d
<   dZedee	         defd            Zdddddddddd	de	de	dee	         dee	         dee	         dee	         de	dee	         dee	         dee	         dee	         ddfdZedddddddde	dee	         dee	         de	dee	         dee	         dee	         dee	         de	de	fd            Zedee	ef         ddfd             Zed5d"            Zed#ed$d%d&d'dd fd(            Zed)ee	         de	d*d+dd fd,            Ze de	deee	                  fd-            Z!e dee	         ddfd.            Z"ed6d*d+d/edd+fd0            Z#ed*d+de$e	ee	         e	ef         fd1            Z%e d7d2            Z&ed7d3            Z'de	f fd4Z( xZ)S )8r@   T      Nallowed_schemesFtld_requireduser_requiredhost_requiredhidden_parts
r%   r&   r'   r:   r;   r<   r+   r,   r-   r.   urlrQ   c                 V    t                               | | | j        di |n|          S )Nr4   )r2   __new__build)clsrz   kwargss      r6   r|   zAnyUrl.__new__   s1    {{3s{		 3 3F 3 3 3LLLr5   r*   )	r&   r'   r:   r;   r<   r+   r,   r-   r.   r%   r&   r'   r:   r;   r<   r+   r,   r-   r.   c       
             t                               |           || _        || _        || _        || _        || _        || _        || _        |	| _	        |
| _
        || _        d S rS   )r2   __init__r%   r&   r'   r:   r;   r<   r+   r,   r-   r.   )selfrz   r%   r&   r'   r:   r;   r<   r+   r,   r-   r.   s               r6   r   zAnyUrl.__init__   s`     	S	 	"		
 r5   )r&   r'   r+   r,   r-   r.   _kwargsc                ,   t          d||||||||d|	}
|dz   }|r||z  }|r|d|z   z  }|s|r|dz  }||z  }|r=d| j        vs,|                     |
                              d          |k    r|d|z   z  }|r||z  }|r|d|z   z  }|r|d|z   z  }|S )	N)r%   r&   r'   r:   r+   r,   r-   r.   z://:@r+   ?#r4   )r$   rx   get_default_partsget)r~   r%   r&   r'   r:   r+   r,   r-   r.   r   partsrz   s               r6   r}   zAnyUrl.build   s     



 

 

 

 un 	4KC 	"3>!C 	8 	3JCt 	V3#333s7L7LU7S7S7W7WX^7_7_cg7g7g3:C 	4KC 	3;C 	"3>!C
r5   field_schemac                 @    t          || j        | j        d           d S )Nuri)	minLength	maxLengthformat)r   
min_length
max_lengthr~   r   s     r6   __modify_schema__zAnyUrl.__modify_schema__  s$    #.afggggggr5   CallableGeneratorc              #      K   | j         V  d S rS   validater~   s    r6   __get_validators__zAnyUrl.__get_validators__        lr5   valuefieldr!   configr    c                 h   |j         | k    r|S t          |          }| j        r|                                }t	          t
          t          |||                    }|                     |          }|s
J d            t	          d|                                          }| 	                    |          }| 
                    |          }|                                t          |          k    r/t          j        ||                                d                    |                     |||          S )NzURL regex failed unexpectedlyr$   )extra)	__class__r   strip_whitespacestripr   r2   r   
_match_url	groupdictapply_default_partsvalidate_partsendlenr   UrlExtraError
_build_url)r~   r   r   r   rz   moriginal_partsr   s           r6   r   zAnyUrl.validate
  s   ?c!!Le$$ 	"KKMME4UE6JJKKNN3111111gq{{}}55''77""5))5577c#hh&S^<<<<~~ae,,,r5   r   r   r$   c                     |                      |          \  }}}} | |rdn||d         |d         |d         ||||d         |d         |d         |d         	          S )
z
        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.   ry   )validate_host)r~   r   rz   r   r:   r;   r<   r=   s           r6   r   zAnyUrl._build_url   s     ),(9(9%(@(@%c9gs$DD?v:&vv.:&
 
 
 	
r5   c                 D    t                                          |           S rS   )r^   matchrz   s    r6   r   zAnyUrl._match_url6  s    {{  %%%r5   c                 Z    | &t          |           dk    rt          j                    d S d S )Ni  )intr   UrlPortError)r+   s    r6   _validate_portzAnyUrl._validate_port:  s5    D		F 2 2%'''  2 2r5   validate_portc                 R   |d         }|t          j                    | j        rA|                                | j        vr&t          j        t          | j                            |r|                     |d                    |d         }| j        r|t          j                    |S )z
        A method used to validate parts of a URL.
        Could be overridden to set default values for parts if missing
        r%   Nr+   r&   )	r   UrlSchemeErrorrt   lowerUrlSchemePermittedErrorsetr   rv   UrlUserInfoError)r~   r   r   r%   r&   s        r6   r   zAnyUrl.validate_parts?  s     x>'))) 	K6<<>>9L#L#L0S5H1I1IJJJ 	.uV}---V} 	,)+++r5   c                    d\  }}}dD ]}||         }|r|} n|| j         rt          j                    n8|dk    r1d}t                                          |          }|8t                                          |          }|t          j                    d}|                    d          }|>|s<t                                          |          }|J |                    d          }d}||dd          }n| j        rt          j                    |rVd}d}|	                    d	          
                    d
          }|(|	                    d	          
                    d
          }||||fS )N)NNF)r*   r(   r)   r*   FTr;   rr   
int_domainidnaascii)rw   r   UrlHostErrorrh   	fullmatchrm   groupru   UrlHostTldErrorencodedecode)	r~   r   r;   r<   r=   fr:   is_internationalds	            r6   r   zAnyUrl.validate_hostU  s   "3Y+ 	 	A8D 	 <  ,)+++,(""$"$$..t44Ay$&&00669 -///#' ''%..C{#3{$&&0066}}}ggenn#' !""g! /,... =(	{{6**11'::?**V,,33G<<CS)W,,r5   c                     i S rS   r4   r   s    r6   r   zAnyUrl.get_default_parts  s    	r5   c                 z    |                      |                                          D ]\  }}||         s|||<   |S rS   )r   items)r~   r   keyr   s       r6   r   zAnyUrl.apply_default_parts  sJ    //66<<>> 	# 	#JC: #"c
r5   c                      d                      fd j        D                       } j        j         dt	                                                       d| dS )Nz, c              3   b   K   | ])}t          |          | dt          |          V  *d S )N=)getattr).0nr   s     r6   	<genexpr>z"AnyUrl.__repr__.<locals>.<genexpr>  sM      nn!QXY]_`QaQaQmQ55q!1!155QmQmQmQmnnr5   ())join	__slots__r   r/   super__repr__)r   r   r   s   ` r6   r   zAnyUrl.__repr__  s`    		nnnnt~nnnnn.)JJEGG,<,<,>,>JJ%JJJJr5   rQ   r   Tr   r$   rQ   r$   )*r/   r0   r1   r   r   r   rt   r   r   r2   r3   ru   r>   rv   rw   r   rx   r   r   r   objectr|   r   classmethodr}   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   __classcell__r   s   @r6   r@   r@      s        JJ15OXjo.555L$M4M4 SUUL#c("""oIM(3- Mf M M M ]M #"&"!!""#"&! ! !! 	!
 sm! 3-! sm! c]! ! sm! sm! }! 3-! 
! ! ! !6 
 #"&""#"&) ) ) ) sm	)
 3-) ) sm) sm) }) 3-) ) 
) ) ) [)V hT#s(^ h h h h [h    [ -S - -| -PX - - - [-* 
5: 
C 
 
H 
 
 
 [
* & &s 4 & & & \& (Xc] (t ( ( ( \(  7 4 7    [* '-' '-eC#T4Q.R '- '- '- ['-R    \    [K# K K K K K K K K K Kr5   r@   c                       e Zd ZddhZdZdS )rA   httphttpsr4   N)r/   r0   r1   rt   r   r4   r5   r6   rA   rA     s        w'OIIIr5   rA   c                   4    e Zd ZdZdZdhZed	d            ZdS )
rC   Ti#  r+   r   r$   rQ   c                 &    d| d         dk    rdndiS )Nr+   r%   r   80443r4   r   s    r6   r   zHttpUrl.get_default_parts  s    h6 9 9uEEr5   Nr   )r/   r0   r1   ru   r   rx   r   r   r4   r5   r6   rC   rC     sI        LJ8LF F F \F F Fr5   rC   c                       e Zd ZdhZdZdZdS )rB   fileFr4   N)r/   r0   r1   rt   rw   r   r4   r5   r6   rB   rB     s        hOMIIIr5   rB   c            	            e Zd Zej        dz   Zdddedeed                  def fdZe	de
d	eee
                  fd
            Zedddded	df fd            Zedee
         de
ddd	d fd            Z xZS )MultiHostDsn)hostsNargsr   r9   r   c                H     t                      j        |i | || _        d S rS   )r   r   r   )r   r   r   r   r   s       r6   r   zMultiHostDsn.__init__  s*    $)&)))


r5   rz   rQ   c                 D    t                                          |           S rS   )ra   r   r   s    r6   r   zMultiHostDsn._match_url  s    #%%++C000r5   Tr   r$   r   c                 J    t                                          |d          S )NF)r   )r   r   )r~   r   r   r   s      r6   r   zMultiHostDsn.validate_parts  s     ww%%e5%AAAr5   r   c                 <   g }t                      }|                                d                             d          D ]}|                    |                                          }|                     |          \  }}}	}
|                    d          }|                     |           |                    ||	||
|d           t          |          dk    rS | t          d |D                       rd n||d         |d         |d	         |d
         |d         |d         d |	  	        S |d         } | |d         rd n||d         |d         |d	         |d         |d         |d         |                    d          |d
         |d         |d                   S )Nr   ,r+   )r:   r<   r;   r=   r+   rr   c                     g | ]
}|d          S )r=   r4   )r   hps     r6   
<listcomp>z+MultiHostDsn._build_url.<locals>.<listcomp>  s    AAArR	]AAAr5   r%   r&   r'   r,   r-   r.   )r%   r&   r'   r,   r-   r.   r<   r   r   r=   r:   r;   r<   ry   )
rp   r   splitr   r   r   r   appendr   any)r~   r   rz   r   hosts_partshost_rer:   r   r;   r<   r=   r+   	host_parts                r6   r   zMultiHostDsn._build_url  s   )+,,KKMM'*0055 	 	D}}T**4466A,/,=,=a,@,@)D#y'55==Dt$$$ !*&      {a3AA[AAABBKX6]z*6]Gnz*!
 
 
 
 $AI3!),5#X6]z*v&e$#K0]]6**6]Gnz*   r5   r   )r/   r0   r1   r@   r   r   r   r   r   r   r2   r   r   r   r>   r   r   r   r   s   @r6   r   r     s<        :-IHL   c (43D*E X[       1 1s 4 1 1 1 \1 B B7 B4 B7 B B B B B [B -5: -C - -N - - - [- - - - -r5   r   c                       e Zd Zh dZdZdZdS )rJ   >	   postgresql+pg8000postgresql+asyncpgpostgresql+psycopgpostgresql+psycopg2postgresql+pygresqlpostgresql+psycopg2cffipostgresql+py-postgresqlpostgres
postgresqlTr4   N)r/   r0   r1   rt   rv   r   r4   r5   r6   rJ   rJ     s+        
 
 
O MIIIr5   rJ   c                       e Zd Zh dZdZdS )rK   >   cockroachdb+asyncpgcockroachdb+psycopg2cockroachdbTN)r/   r0   r1   rt   rv   r4   r5   r6   rK   rK     s&          O
 MMMr5   rK   c                       e Zd ZddhZdZdS )rL   amqpamqpsFN)r/   r0   r1   rt   rw   r4   r5   r6   rL   rL     s        w'OMMMr5   rL   c                   6    e Zd ZdZddhZdZed
d            Zd	S )rM   r4   redisredissFr   r$   rQ   c                 2    | d         s
| d         sdnddddS )Nr(   r)   	localhost 6379z/0)r*   r+   r,   r4   r   s    r6   r   zRedisDsn.get_default_parts  s2     +0-Q5=Qkkr
 
 	
r5   Nr   )r/   r0   r1   r   rt   rw   r   r   r4   r5   r6   rM   rM     sF        I)OM
 
 
 \
 
 
r5   rM   c                   ,    e Zd ZdhZedd            ZdS )rN   mongodbr   r$   rQ   c                 
    ddiS )Nr+   27017r4   r   s    r6   r   zMongoDsn.get_default_parts  s     G
 	
r5   Nr   r/   r0   r1   rt   r   r   r4   r5   r6   rN   rN     s;         kO 
 
 
 \
 
 
r5   rN   c                   ,    e Zd ZdhZedd            ZdS )rO   kafkar   r$   rQ   c                     dddS )Nr  9092)r*   r+   r4   r   s    r6   r   zKafkaDsn.get_default_parts"  s     "
 
 	
r5   Nr   r  r4   r5   r6   rO   rO     s9        iO
 
 
 \
 
 
r5   rO   Trr   rs   r   r   r   ru   rw   rt   r   r   r   ru   rw   rt   c                 Z    t          | |||||          }t          dt          f|          S )Nr"  UrlValue)dicttyper@   )r   r   r   ru   rw   rt   	namespaces          r6   rD   rD   *  s@     )!#'  I 
VIy111r5   c                  T    	 dd l a d S # t          $ r} t          d          | d } ~ ww xY w)Nr   zCemail-validator is not installed, run `pip install pydantic[email]`)email_validatorImportError)es    r6   import_email_validatorr,  ?  sO    h h h h_``fgghs    
'"'c                       e Zd Zedeeef         ddfd            Zed	d            Zede	e         defd            Z
dS )
rE   r   rQ   Nc                 4    |                     dd           d S )Nstringemailr&  r   updater   s     r6   r   zEmailStr.__modify_schema__H  s!    ':::::r5   r   c              #   J   K   t                       t          V  | j        V  d S rS   )r,  r   r   r   s    r6   r   zEmailStr.__get_validators__L  s4       	   lr5   r   c                 ,    t          |          d         S )Nrr   )rP   r~   r   s     r6   r   zEmailStr.validateT  s    e$$Q''r5   r   )r/   r0   r1   r   r   r2   r   r   r   r   r   r4   r5   r6   rE   rE   G  s        ;T#s(^ ; ; ; ; [;    [ (U3Z (C ( ( ( [( ( (r5   rE   c                       e Zd ZdZdedefdZdedefdZe	de
eef         dd	fd
            Ze	dd            Ze	dedd fd            ZdefdZd	S )rF   namer0  r9  r0  c                 "    || _         || _        d S rS   r8  )r   r9  r0  s      r6   r   zNameEmail.__init__\  s    	


r5   otherrQ   c                 h    t          |t                    o| j        | j        f|j        |j        fk    S rS   )
isinstancerF   r9  r0  )r   r;  s     r6   __eq__zNameEmail.__eq__`  s0    %++dDJ0GEJX]XcKd0ddr5   r   Nc                 4    |                     dd           d S )Nr/  z
name-emailr1  r2  r   s     r6   r   zNameEmail.__modify_schema__c  s!    ,?????r5   r   c              #   8   K   t                       | j        V  d S rS   )r,  r   r   s    r6   r   zNameEmail.__get_validators__g  s&         lr5   r   c                 ^    |j         | k    r|S t          |          } | t          |           S rS   )r   r   rP   r6  s     r6   r   zNameEmail.validatem  s6    ?c!!Le$$sN5))**r5   c                 &    | j          d| j         dS )Nz <>r8  )r   s    r6   __str__zNameEmail.__str__t  s    ),,tz,,,,r5   r   )r/   r0   r1   r   r2   r   r   r>   r>  r   r   r   r   r   rD  r4   r5   r6   rF   rF   Y  s       IS     eC eD e e e e @T#s(^ @ @ @ @ [@    [
 +S +[ + + + [+- - - - - - -r5   rF   c                       e Zd ZdZedeeef         ddfd            Zed
d            Z	ede
eeef         de
eef         fd	            ZdS )rG   r4   r   rQ   Nc                 4    |                     dd           d S )Nr/  ipvanyaddressr1  r2  r   s     r6   r   zIPvAnyAddress.__modify_schema__{  !    /BBBBBr5   r   c              #      K   | j         V  d S rS   r   r   s    r6   r   z IPvAnyAddress.__get_validators__  r   r5   r   c                     	 t          |          S # t          $ r Y nw xY w	 t          |          S # t          $ r t          j                    w xY wrS   )r   
ValueErrorr   r   IPvAnyAddressErrorr6  s     r6   r   zIPvAnyAddress.validate  sr    	u%%% 	 	 	D		.u%%% 	. 	. 	.+---	.    
1 Ar   )r/   r0   r1   r   r   r   r2   r   r   r   r   bytesr   r   r   r   r4   r5   r6   rG   rG   x  s        ICT#s(^ C C C C [C    [ 	.U3s?3 	.k;>V8W 	. 	. 	. [	. 	. 	.r5   rG   c                       e Zd ZdZedeeef         ddfd            Zed
d            Z	ede
deeef         fd	            ZdS )rH   r4   r   rQ   Nc                 4    |                     dd           d S )Nr/  ipvanyinterfacer1  r2  r   s     r6   r   z!IPvAnyInterface.__modify_schema__  s"    2CDDDDDr5   r   c              #      K   | j         V  d S rS   r   r   s    r6   r   z"IPvAnyInterface.__get_validators__  r   r5   r   c                     	 t          |          S # t          $ r Y nw xY w	 t          |          S # t          $ r t          j                    w xY wrS   )r   rK  r   r   IPvAnyInterfaceErrorr6  s     r6   r   zIPvAnyInterface.validate  sr    	 ''' 	 	 	D		0 ''' 	0 	0 	0-///	0rM  r   )r/   r0   r1   r   r   r   r2   r   r   r   NetworkTyper   r   r   r   r4   r5   r6   rH   rH     s        IET#s(^ E E E E [E    [ 	0[ 	0U=-3O-P 	0 	0 	0 [	0 	0 	0r5   rH   c                       e Zd Zedeeef         ddfd            Zed	d            Zede	de
eef         fd            ZdS )
rI   r   rQ   Nc                 4    |                     dd           d S )Nr/  ipvanynetworkr1  r2  r   s     r6   r   zIPvAnyNetwork.__modify_schema__  rH  r5   r   c              #      K   | j         V  d S rS   r   r   s    r6   r   z IPvAnyNetwork.__get_validators__  r   r5   r   c                     	 t          |          S # t          $ r Y nw xY w	 t          |          S # t          $ r t          j                    w xY wrS   )r   rK  r   r   IPvAnyNetworkErrorr6  s     r6   r   zIPvAnyNetwork.validate  sr    	u%%% 	 	 	D		.u%%% 	. 	. 	.+---	.rM  r   )r/   r0   r1   r   r   r2   r   r   r   rU  r   r   r   r   r4   r5   r6   rI   rI     s        CT#s(^ C C C C [C    [ .[ .U;3K-L . . . [. . .r5   rI   z([\w ]*?) *<(.*)> *i   r   c                 d   t           t                       t          |           t          k    rt	          j                    t                              |           }d}|r|                                \  }} | 	                                }	 t          j
        |d          }n$# t           j        $ r}t          j        |d}~ww xY wt          |d          r|j        }|J |p|j        }||fS |                    d          }|d|         }||d                                         }|p|||z   fS )aH  
    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   )r)  r,  r   MAX_EMAIL_LENGTHr   
EmailErrorpretty_email_regexr   groupsr   rP   EmailNotValidErrorhasattrr^  
local_partindexr   )	r   r   r9  r0  r   r+  at_indexre  global_parts	            r6   rP   rP     sM       
5zz$$$!!!$$U++A!D !hhjjeKKMME'.u5QQQ- ' ' 'Q&' ul## <    'u'U{ ;;s##9H9%
HII&,,..!z:#;;;s   B" "C1B>>C)rQ   N)[rU   	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   r)  typing_extensionsr   pydantic.v1.configr    pydantic.v1.fieldsr!   pydantic.v1.typingr"   r   r$   r9   r%  r2   rN  r   rU  __all__rT   r`   re   rj   ro   rY   rW   rX   rZ   r[   r\   r^   ra   rh   rm   rp   r@   rA   rC   rB   r   rJ   rK   rL   rM   rN   rO   r>   rD   r,  rE   rF   rG   rH   rI   rV   ra  r_  rP   r4   r5   r6   <module>rs     s7   					 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                                 $       = = = = = = = = I I I I I I I I !++++++------------......!+tT"9:
  
  
  
  
 	 
  
  
  
     IU      O        CU5eS+A5c?+R%SST  (  "       :I %+073<    'gcl ' ' ' '$%GCL % % % %#'#, # # # #GCL    aK aK aK aK aKS aK aK aKH       F F F F Fj F F F    f   = = = = =6 = = =@    ,   "    6       f   

 
 
 
 
v 
 
 

 
 
 
 
v 
 
 

 
 
 
 
v 
 
 
 "152 2 22 2 	2
 2 2 jo.2 
&\2 2 2 2*h h h h( ( ( ( (s ( ( ($- - - - - - - ->. . . . .L . . .00 0 0 0 0l 0 0 00. . . . .L . . .0  RZ 677  
$<%* $<sCx $< $< $< $< $< $<r5   