o
    ~j6hlV                     @   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   c/var/www/html/chefvision.cloud.itp360.com/venv/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   )ascii_chunkascii_domain_endingr2   r2   r3   ascii_domain_regex   s   ra   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   )	int_chunkint_domain_endingr2   r2   r3   int_domain_regex   s
   re   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   rg   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)clsrp   kwargsr2   r2   r3   rq      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,   )selfrp   r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   r2   r2   r3   ru      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"   rn   get_default_partsget)rs   r#   r$   r%   r6   r)   r*   r+   r,   rw   partsrp   r2   r2   r3   rr      s:   	"zAnyUrl.buildfield_schemac                 C   s   t || j| jdd d S )Nuri)	minLength	maxLengthformat)r   
min_length
max_lengthrs   r   r2   r2   r3   __modify_schema__  s   zAnyUrl.__modify_schema__CallableGeneratorc                 c       | j V  d S rM   validaters   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   UrlExtraError
_build_url)rs   r   r   r   rp   moriginal_partsr~   r2   r2   r3   r   
  s   



zAnyUrl.validater   r~   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,   ro   )validate_host)rs   r   rp   r~   r6   r7   r8   r9   r2   r2   r3   r      s   
zAnyUrl._build_urlc                 C      t  | S rM   )rX   matchrp   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   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   UrlSchemeErrorrj   lowerUrlSchemePermittedErrorsetr   rl   UrlUserInfoError)rs   r~   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   rh   
int_domainidnaascii)rm   r   UrlHostErrorra   	fullmatchre   grouprk   UrlHostTldErrorencodedecode)	rs   r~   r7   r8   r9   fr6   is_internationaldr2   r2   r3   r   U  sH   


zAnyUrl.validate_hostc                 C   s   i S rM   r2   r~   r2   r2   r3   r|     s   zAnyUrl.get_default_partsc                 C   s,   |  | D ]\}}|| s|||< q|S rM   )r|   items)rs   r~   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rv   r2   r3   	<genexpr>  s   0 z"AnyUrl.__repr__.<locals>.<genexpr>())join	__slots__r   r-   super__repr__)rv   r   r   r   r3   r     s    zAnyUrl.__repr__rL   r   Tr~   r"   rL   r"   )*r-   r.   r/   r   r   r   rj   r   r   r0   r1   rk   r:   rl   rm   r   rn   r   r   r   objectrq   ru   classmethodrr   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   r|   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/   rj   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)   r~   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   r|     s   zHttpUrl.get_default_partsNr   )r-   r.   r/   rk   r   rn   r   r|   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/   rj   rm   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   rt   c                   s   t  j|i | || _d S rM   )r   ru   r   )rv   r   r   rt   r   r2   r3   ru     s   
zMultiHostDsn.__init__rp   rL   c                 C   r   rM   )rZ   r   r   r2   r2   r3   r     r   zMultiHostDsn._match_urlTr~   r"   r   c                    s   t  j|ddS )NF)r   )r   r   )rs   r~   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)   rh   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   ro   )
rg   r   splitr   r   r}   r   appendr   any)rs   r   rp   r~   hosts_partshost_rer6   r   r7   r8   r9   r)   	host_partr2   r2   r3   r     sR   


zMultiHostDsn._build_urlr   )r-   r.   r/   r;   r   r   r   r   ru   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   >	   postgresql+pg8000postgresql+asyncpgpostgresql+psycopgpostgresql+psycopg2postgresql+pygresqlpostgresql+psycopg2cffipostgresql+py-postgresqlpostgres
postgresqlTr2   N)r-   r.   r/   rj   rl   r   r2   r2   r2   r3   rE     s    rE   c                   @   s   e Zd Zh dZdZdS )rF   >   cockroachdb+asyncpgcockroachdb+psycopg2cockroachdbTN)r-   r.   r/   rj   rl   r2   r2   r2   r3   rF     s    rF   c                   @   r   )rG   amqpamqpsFN)r-   r.   r/   rj   rm   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   redisredissFr~   r"   rL   c                 C   s    | d s
| d s
dnddddS )Nr&   r'   	localhost 6379z/0)r(   r)   r*   r2   r   r2   r2   r3   r|     s   zRedisDsn.get_default_partsNr   )r-   r.   r/   r   rj   rm   r   r|   r2   r2   r2   r3   rH     s    rH   c                   @       e Zd ZdhZedddZdS )	rI   mongodbr~   r"   rL   c                 C   s   ddiS )Nr)   27017r2   r   r2   r2   r3   r|     s   zMongoDsn.get_default_partsNr   r-   r.   r/   rj   r   r|   r2   r2   r2   r3   rI     s    rI   c                   @   r   )	rJ   kafkar~   r"   rL   c                 C   s
   dddS )Nr   9092)r(   r)   r2   r   r2   r2   r3   r|   "  s   zKafkaDsn.get_default_partsNr   r   r2   r2   r2   r3   rJ     s    rJ   Trh   ri   r   r   r   rk   rm   rj   r   r   r   rk   rm   rj   c                 C   s"   t | |||||d}tdtf|S )Nr   UrlValue)dicttyper;   )r   r   r   rk   rm   rj   	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 )Nrh   )rK   rs   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  )rv   r  r  r2   r2   r3   ru   \  s   
zNameEmail.__init__otherrL   c                 C   s"   t |to| j| jf|j|jfkS rM   )
isinstancerA   r  r  )rv   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   ru   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  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   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  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   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  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   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)check_deliverability
normalizedry   )r  r  r   MAX_EMAIL_LENGTHr   
EmailErrorpretty_email_regexr   groupsr   rK   EmailNotValidErrorhasattrr   
local_partindexr   )	r   r   r  r  r~   r  at_indexr'  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   pydantic.v1r   pydantic.v1.utilsr   r   pydantic.v1.validatorsr   r   r  typing_extensionsr   pydantic.v1.configr   pydantic.v1.fieldsr    pydantic.v1.typingr!   r   r"   r5   r   r0   r  r   r  __all__rN   rY   r^   rb   rf   rS   rQ   rR   rT   rU   rV   rX   rZ   ra   re   rg   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@	


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