o
    ZhlV                     @   s^  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rd 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 de$ddZ,G dd de$ddZ-n
da"G d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dZ?dee/ fddZ@dee/ fddZAdee/ fd d!ZBdee/ fd"d#ZCG d$d% d%e/ZDG d&d' d'eDZEG d(d) d)eEZFG d*d+ d+eDZGG d,d- d-eDZHG d.d/ d/eHZIG d0d1 d1eDZJG d2d3 d3eDZKG d4d5 d5eDZLG d6d7 d7eDZMG d8d9 d9eDZNd:d;d<d:d:dd=d>eOd?e1d@e1dAeOdBeOdCeee/  deeD fdDdEZPdWdFdGZQG dHdI dIe/ZRG dJdK dKeZSG dLdM dMeZTG dNdO dOeZUG dPdQ dQe	ZVe WdRZXdSZY	 dTee/ dee/e/f fdUdVZZdS )X    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                   @   s   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    r2   r2   K/var/www/html/lang_env/lib/python3.10/site-packages/pydantic/v1/networks.pyr"   ,   s   
 r"   F)totalc                   @   sB   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-   r.   r/   r0   r1   r   boolr2   r2   r2   r3   r5   8   s   
 r5   c                   @   s   e Zd ZdS )r"   N)r-   r.   r/   r2   r2   r2   r3   r"   B   s    )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                   C   s2   t d u rt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
IGNORECASEr2   r2   r2   r3   	url_regexq   s   rX   c                   C   s0   t du rt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_cacherO   rP   rQ   rR   rT   rU   rV   rW   r2   r2   r2   r3   multi_host_url_regex{   s   
rZ   c                  C   2   t d u rd} d}t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_cacherO   rP   rW   )Zascii_chunkZascii_domain_endingr2   r2   r3   ascii_domain_regex   s   r_   c                  C   r[   )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}))?\.?r\   r]   )_int_domain_regex_cacherO   rP   rW   )Z	int_chunkZint_domain_endingr2   r2   r3   int_domain_regex   s
   ra   c                   C   s   t d u rtttja t S rM   )_host_regex_cacherO   rP   rS   rW   r2   r2   r2   r3   
host_regex   s   rc   c                       sh  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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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 d!Zed"ee	ef ddfd#d$ZedCd&d'Zed(ed)d*d+d,dd fd-d.Zed/ee	 de	d0d1dd fd2d3Ze de	deee	  fd4d5Z!e dee	 ddfd6d7Z"edDd0d1d8edd1fd9d:Z#ed0d1de$e	ee	 e	ef fd;d<Z%e dEd=d>Z&edEd?d@Z'de	f fdAdBZ(  Z)S )Fr;   T      Nallowed_schemesFtld_requireduser_requiredhost_requiredhidden_parts
r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   urlrL   c                 K   s&   t | |d u r| jdi |S |S )Nr2   )r0   __new__build)clsrl   kwargsr2   r2   r3   rm      s   &zAnyUrl.__new__r(   )	r$   r%   r6   r7   r8   r)   r*   r+   r,   r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   c       
         C   sJ   t | || _|| _|| _|| _|| _|| _|| _|	| _	|
| _
|| _d S rM   )r0   __init__r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   )selfrl   r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   r2   r2   r3   rq      s   

zAnyUrl.__init__)r$   r%   r)   r*   r+   r,   _kwargsc                K   s   t d||||||||d|	}
|d }|r||7 }|r"|d| 7 }|s&|r*|d7 }||7 }|rEd| jvs?| |
d|krE|d| 7 }|rK||7 }|rS|d| 7 }|r[|d| 7 }|S )	N)r#   r$   r%   r6   r)   r*   r+   r,   z://:@r)   ?#r2   )r"   rj   get_default_partsget)ro   r#   r$   r%   r6   r)   r*   r+   r,   rs   partsrl   r2   r2   r3   rn      s:   	"zAnyUrl.buildfield_schemac                 C   s   t || j| jdd d S )Nuri)Z	minLengthZ	maxLengthformat)r   
min_length
max_lengthro   r{   r2   r2   r3   __modify_schema__  s   zAnyUrl.__modify_schema__CallableGeneratorc                 c       | j V  d S rM   validatero   r2   r2   r3   __get_validators__     zAnyUrl.__get_validators__valuefieldr    configr   c                 C   s   |j | kr|S t|}| jr| }ttt|||}| |}|s&J dtd| }| 	|}| 
|}| t|krKtj|| d  d| |||S )NzURL regex failed unexpectedlyr"   )extra)	__class__r   strip_whitespacestripr   r0   r   
_match_url	groupdictapply_default_partsvalidate_partsendlenr   ZUrlExtraError
_build_url)ro   r   r   r   rl   mZoriginal_partsrz   r2   r2   r3   r   
  s   



zAnyUrl.validater   rz   r"   c                 C   sT   |  |\}}}}| |rdn||d |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,   rk   )validate_host)ro   r   rl   rz   r6   r7   r8   r9   r2   r2   r3   r      s   
zAnyUrl._build_urlc                 C      t  | S rM   )rX   matchrl   r2   r2   r3   r   6     zAnyUrl._match_urlc                 C   s$   | d urt | dkrt d S d S )Ni  )intr   ZUrlPortError)r)   r2   r2   r3   _validate_port:  s   zAnyUrl._validate_portvalidate_portc                 C   sp   |d }|du rt  | jr| | jvrt t| j|r'| |d  |d }| jr6|du r6t  |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   ZUrlSchemeErrorrf   lowerZUrlSchemePermittedErrorsetr   rh   ZUrlUserInfoError)ro   rz   r   r#   r$   r2   r2   r3   r   ?  s   zAnyUrl.validate_partsc           	      C   s   d\}}}dD ]}|| }|r|} nq|d u r | j rt nj|dkrd}t |}|d u r@t |}|d u r>t d}|d}|d u r^|s^t |}|d usWJ |d}d}|d uri|dd  }n| jrpt |rd}d}|	d	
d
}|d ur|	d	
d
}||||fS )N)NNF)r(   r&   r'   r(   FTr7   rd   Z
int_domainidnaascii)ri   r   ZUrlHostErrorr_   	fullmatchra   grouprg   ZUrlHostTldErrorencodedecode)	ro   rz   r7   r8   r9   fr6   Zis_internationaldr2   r2   r3   r   U  sH   


zAnyUrl.validate_hostc                 C   s   i S rM   r2   rz   r2   r2   r3   rx     s   zAnyUrl.get_default_partsc                 C   s,   |  | D ]\}}|| s|||< q|S rM   )rx   items)ro   rz   keyr   r2   r2   r3   r     s
   zAnyUrl.apply_default_partsc                    s:   d  fdd jD } jj dt   d| dS )Nz, c                 3   s2    | ]}t  |d ur| dt  |V  qd S )N=)getattr).0nrr   r2   r3   	<genexpr>  s   0 z"AnyUrl.__repr__.<locals>.<genexpr>())join	__slots__r   r-   super__repr__)rr   r   r   r   r3   r     s    zAnyUrl.__repr__rL   r   Trz   r"   rL   r"   )*r-   r.   r/   r   r~   r   rf   r   r   r0   r1   rg   r:   rh   ri   r   rj   r   r   r   objectrm   rq   classmethodrn   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   rx   r   r   __classcell__r2   r2   r   r3   r;      s   
 	

	
+ $)r;   c                   @      e Zd ZddhZdZdS )r<   httphttpsr2   N)r-   r.   r/   rf   r   r2   r2   r2   r3   r<     s    r<   c                   @   s(   e Zd ZdZdZdhZed
ddZd	S )r>   Ti#  r)   rz   r"   rL   c                 C   s   d| d dkr
diS diS )Nr)   r#   r   80443r2   r   r2   r2   r3   rx     s   zHttpUrl.get_default_partsNr   )r-   r.   r/   rg   r   rj   r   rx   r2   r2   r2   r3   r>     s    r>   c                   @   s   e Zd ZdhZdZdZdS )r=   fileFr2   N)r-   r.   r/   rf   ri   r   r2   r2   r2   r3   r=     s    r=   c                	       s   e Zd Zejd Zdddedeed  def fddZe	d	e
d
eee
  fddZedddded
df fddZedee
 d	e
ddd
d fddZ  ZS )MultiHostDsn)hostsNargsr   r5   rp   c                   s   t  j|i | || _d S rM   )r   rq   r   )rr   r   r   rp   r   r2   r3   rq     s   
zMultiHostDsn.__init__rl   rL   c                 C   r   rM   )rZ   r   r   r2   r2   r3   r     r   zMultiHostDsn._match_urlTrz   r"   r   c                    s   t  j|ddS )NF)r   )r   r   )ro   rz   r   r   r2   r3   r     s   zMultiHostDsn.validate_partsr   c                 C   s  g }t  }| d dD ]'}|| }| |\}}}	}
|d}| | |||	||
|d qt|dkr`| t	dd |D rHd n||d |d	 |d
 |d |d |d d |d	S |d }| |d rkd n||d |d	 |d
 |d |d |d |d|d |d |d dS )Nr   ,r)   )r6   r8   r7   r9   r)   rd   c                 S   s   g | ]}|d  qS )r9   r2   )r   hpr2   r2   r3   
<listcomp>  s    z+MultiHostDsn._build_url.<locals>.<listcomp>r#   r$   r%   r*   r+   r,   )r#   r$   r%   r*   r+   r,   r8   r   r   r9   r6   r7   r8   rk   )
rc   r   splitr   r   ry   r   appendr   any)ro   r   rl   rz   Zhosts_partsZhost_rer6   r   r7   r8   r9   r)   Z	host_partr2   r2   r3   r     sR   


zMultiHostDsn._build_urlr   )r-   r.   r/   r;   r   r   r   r   rq   r   r0   r   r   r   r:   r   r   r   r2   r2   r   r3   r     s    
((r   c                   @   s   e Zd Zh dZdZdZdS )rE   >	   zpostgresql+psycopgpostgreszpostgresql+pygresqlzpostgresql+pg8000zpostgresql+py-postgresqlzpostgresql+asyncpgzpostgresql+psycopg2cffi
postgresqlzpostgresql+psycopg2Tr2   N)r-   r.   r/   rf   rh   r   r2   r2   r2   r3   rE     s    rE   c                   @   s   e Zd Zh dZdZdS )rF   >   Zcockroachdbzcockroachdb+asyncpgzcockroachdb+psycopg2TN)r-   r.   r/   rf   rh   r2   r2   r2   r3   rF     s    rF   c                   @   r   )rG   ZamqpZamqpsFN)r-   r.   r/   rf   ri   r2   r2   r2   r3   rG     s    rG   c                   @   s*   e Zd ZdZddhZdZeddd	Zd
S )rH   r2   ZredisZredissFrz   r"   rL   c                 C   s    | d s
| d s
dnddddS )Nr&   r'   	localhost Z6379z/0)r(   r)   r*   r2   r   r2   r2   r3   rx     s   zRedisDsn.get_default_partsNr   )r-   r.   r/   r   rf   ri   r   rx   r2   r2   r2   r3   rH     s    rH   c                   @       e Zd ZdhZedddZdS )	rI   Zmongodbrz   r"   rL   c                 C   s   ddiS )Nr)   Z27017r2   r   r2   r2   r3   rx     s   zMongoDsn.get_default_partsNr   r-   r.   r/   rf   r   rx   r2   r2   r2   r3   rI     s    rI   c                   @   r   )	rJ   Zkafkarz   r"   rL   c                 C   s
   dddS )Nr   Z9092)r(   r)   r2   r   r2   r2   r3   rx   "  s   zKafkaDsn.get_default_partsNr   r   r2   r2   r2   r3   rJ     s    rJ   Trd   re   r   r~   r   rg   ri   rf   r   r~   r   rg   ri   rf   c                 C   s"   t | |||||d}tdtf|S )Nr   ZUrlValue)dicttyper;   )r   r~   r   rg   ri   rf   	namespacer2   r2   r3   r?   *  s   
r?   c               
   C   s2   zdd l a W d S  ty }  ztd| d } ~ ww )Nr   zCemail-validator is not installed, run `pip install pydantic[email]`)email_validatorImportError)er2   r2   r3   import_email_validator?  s   
r   c                   @   sR   e Zd Zedeeef ddfddZedddZed	e	e defd
dZ
dS )r@   r{   rL   Nc                 C      |j ddd d S )Nstringemailr   r}   updater   r2   r2   r3   r   H     zEmailStr.__modify_schema__r   c                 c   s    t   tV  | jV  d S rM   )r   r   r   r   r2   r2   r3   r   L  s   zEmailStr.__get_validators__r   c                 C   s   t |d S )Nrd   )rK   ro   r   r2   r2   r3   r   T  r   zEmailStr.validater   )r-   r.   r/   r   r   r0   r   r   r   r   r   r2   r2   r2   r3   r@   G  s    r@   c                   @   s   e Zd ZdZdedefddZdedefdd	Ze	d
e
eef ddfddZe	dddZe	dedd fddZdefddZdS )rA   namer   r   r   c                 C   s   || _ || _d S rM   r   )rr   r   r   r2   r2   r3   rq   \  s   
zNameEmail.__init__otherrL   c                 C   s"   t |to| j| jf|j|jfkS rM   )
isinstancerA   r   r   )rr   r   r2   r2   r3   __eq__`  s   "zNameEmail.__eq__r{   Nc                 C   r   )Nr   z
name-emailr   r   r   r2   r2   r3   r   c  r   zNameEmail.__modify_schema__r   c                 c   s    t   | jV  d S rM   )r   r   r   r2   r2   r3   r   g  s   zNameEmail.__get_validators__r   c                 C   s"   |j | kr|S t|}| t| S rM   )r   r   rK   r   r2   r2   r3   r   m  s   
zNameEmail.validatec                 C   s   | j  d| j dS )Nz <>r   r   r2   r2   r3   __str__t  s   zNameEmail.__str__r   )r-   r.   r/   r   r0   rq   r   r:   r   r   r   r   r   r   r   r2   r2   r2   r3   rA   Y  s    rA   c                   @   sd   e Zd ZdZedeeef ddfddZeddd	Z	ed
e
eeef de
eef fddZdS )rB   r2   r{   rL   Nc                 C   r   )Nr   Zipvanyaddressr   r   r   r2   r2   r3   r   {  r   zIPvAnyAddress.__modify_schema__r   c                 c   r   rM   r   r   r2   r2   r3   r     r   z IPvAnyAddress.__get_validators__r   c                 C   @   zt |W S  ty   Y nw zt|W S  ty   t w rM   )r   
ValueErrorr   r   ZIPvAnyAddressErrorr   r2   r2   r3   r        

zIPvAnyAddress.validater   )r-   r.   r/   r   r   r   r0   r   r   r   r   bytesr   r   r   r   r2   r2   r2   r3   rB   x  s    *rB   c                   @   sZ   e Zd ZdZedeeef ddfddZeddd	Z	ed
e
deeef fddZdS )rC   r2   r{   rL   Nc                 C   r   )Nr   Zipvanyinterfacer   r   r   r2   r2   r3   r     r   z!IPvAnyInterface.__modify_schema__r   c                 c   r   rM   r   r   r2   r2   r3   r     r   z"IPvAnyInterface.__get_validators__r   c                 C   r   rM   )r   r   r   r   ZIPvAnyInterfaceErrorr   r2   r2   r3   r     r   zIPvAnyInterface.validater   )r-   r.   r/   r   r   r   r0   r   r   r   NetworkTyper   r   r   r   r2   r2   r2   r3   rC     s     rC   c                   @   sV   e Zd Zedeeef ddfddZedddZed	e	de
eef fd
dZdS )rD   r{   rL   Nc                 C   r   )Nr   Zipvanynetworkr   r   r   r2   r2   r3   r     r   zIPvAnyNetwork.__modify_schema__r   c                 c   r   rM   r   r   r2   r2   r3   r     r   z IPvAnyNetwork.__get_validators__r   c                 C   r   rM   )r   r   r   r   ZIPvAnyNetworkErrorr   r2   r2   r3   r     s   

zIPvAnyNetwork.validater   )r-   r.   r/   r   r   r0   r   r   r   r   r   r   r   r   r2   r2   r2   r3   rD     s     rD   z([\w ]*?) *<(.*)> *i   r   c           	   
   C   s   t du rt  t| tkrt t| }d}|r | \}} | 	 }z	t j
|dd}W n t jy> } ztj|d}~ww t|drV|j}|dusMJ |pQ|j}||fS |d}|d| }||d  }|pl||| 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)Zcheck_deliverability
normalizedru   )r   r   r   MAX_EMAIL_LENGTHr   Z
EmailErrorpretty_email_regexr   groupsr   rK   ZEmailNotValidErrorhasattrr   
local_partindexr   )	r   r   r   r   rz   r   Zat_indexr   Zglobal_partr2   r2   r3   rK     s0   



rK   )rL   N)[rO   	ipaddressr   r   r   r   r   r   r   r	   typingr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zpydantic.v1r   Zpydantic.v1.utilsr   r   Zpydantic.v1.validatorsr   r   r   typing_extensionsr   Zpydantic.v1.configr   Zpydantic.v1.fieldsr    Zpydantic.v1.typingr!   r   r"   r5   r   r0   r   r   r   __all__rN   rY   r^   r`   rb   rS   rQ   rR   rT   rU   rV   rX   rZ   r_   ra   rc   r;   r<   r>   r=   r   rE   rF   rG   rH   rI   rJ   r:   r?   r   r@   rA   rB   rC   rD   rP   r   r   rK   r2   r2   r2   r3   <module>   s    (D
*
	
 e@	



"