o
    $6dBU                     @   sX  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.e/e0eee.e/e0f ee.e0f f f Z1g dZ2da3da4da5da6da7dZ8dZ9d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 Z@dee. fd!d"ZAdee. fd#d$ZBG d%d& d&e.ZCG d'd( d(eCZDG d)d* d*eDZEG d+d, d,eCZFG d-d. d.eCZGG d/d0 d0eGZHG d1d2 d2eCZIG d3d4 d4eCZJG d5d6 d6eCZKG d7d8 d8eCZLG d9d: d:eCZMd;dd<d;d;dd=d>eNd?e0d@e0dAeNdBeNdCeee.  deeC fdDdEZOdVdFdGZPG dHdI dIe.ZQG dJdK dKeZRG dLdM dMeZSG dNdO dOeZTG dPdQ dQe	ZUe VdRZWdSee. dee.e.f fdTdUZXdS )W    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    r3   r3   kC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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/   r0   r1   r2   r   boolr3   r3   r3   r4   r6   8   s   
 r6   c                   @   s   e Zd ZdS )r#   N)r.   r/   r0   r3   r3   r3   r4   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
IGNORECASEr3   r3   r3   r4   	url_regexq   s   rY   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_cacherP   rQ   rR   rS   rU   rV   rW   rX   r3   r3   r3   r4   multi_host_url_regex{   s   
r[   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_cacherP   rQ   rX   )Zascii_chunkZascii_domain_endingr3   r3   r4   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_cacherP   rQ   rX   )Z	int_chunkZint_domain_endingr3   r3   r4   int_domain_regex   s
   rb   c                   C   s   t d u rtttja t S rN   )_host_regex_cacherP   rQ   rT   rX   r3   r3   r3   r4   
host_regex   s   rd   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<   Tr      Nallowed_schemesFtld_requireduser_requiredhost_requiredhidden_parts
r$   r%   r&   r7   r8   r9   r*   r+   r,   r-   urlrM   c                 K   s&   t | |d u r| jdi |S |S )Nr3   )r1   __new__build)clsrl   kwargsr3   r3   r4   rm      s   &zAnyUrl.__new__r)   )	r%   r&   r7   r8   r9   r*   r+   r,   r-   r$   r%   r&   r7   r8   r9   r*   r+   r,   r-   c       
         C   sJ   t | || _|| _|| _|| _|| _|| _|| _|	| _	|
| _
|| _d S rN   )r1   __init__r$   r%   r&   r7   r8   r9   r*   r+   r,   r-   )selfrl   r$   r%   r&   r7   r8   r9   r*   r+   r,   r-   r3   r3   r4   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&   r7   r*   r+   r,   r-   z://:@r*   ?#r3   )r#   rj   get_default_partsget)ro   r$   r%   r&   r7   r*   r+   r,   r-   rs   partsrl   r3   r3   r4   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{   r3   r3   r4   __modify_schema__  s   zAnyUrl.__modify_schema__CallableGeneratorc                 c       | j V  d S rN   validatero   r3   r3   r4   __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   r1   r   
_match_url	groupdictapply_default_partsvalidate_partsendlenr   ZUrlExtraError
_build_url)ro   r   r   r   rl   mZoriginal_partsrz   r3   r3   r4   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   r7   r8   r9   r:   r3   r3   r4   r      s   
zAnyUrl._build_urlc                 C      t  | S rN   )rY   matchrl   r3   r3   r4   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*   r3   r3   r4   _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%   r3   r3   r4   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)   FTr8   r   Z
int_domainidnaascii)ri   r   ZUrlHostErrorr`   	fullmatchrb   grouprg   ZUrlHostTldErrorencodedecode)	ro   rz   r8   r9   r:   fr7   Zis_internationaldr3   r3   r4   r   U  sH   


zAnyUrl.validate_hostc                 C   s   i S rN   r3   rz   r3   r3   r4   rx     s   zAnyUrl.get_default_partsc                 C   s,   |  | D ]\}}|| s|||< q|S rN   )rx   items)ro   rz   keyr   r3   r3   r4   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   r3   r4   	<genexpr>  s   0 z"AnyUrl.__repr__.<locals>.<genexpr>())join	__slots__r   r.   super__repr__)rr   r   r   r   r4   r     s    zAnyUrl.__repr__rM   r   Trz   r#   rM   r#   )*r.   r/   r0   r   r~   r   rf   r   r   r1   r2   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__r3   r3   r   r4   r<      s   
 	

	
+ $)r<   c                   @      e Zd ZddhZdZdS )r=   httphttpsr3   N)r.   r/   r0   rf   r   r3   r3   r3   r4   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#   rM   c                 C   s   d| d dkr
diS diS )Nr*   r$   r   80443r3   r   r3   r3   r4   rx     s   zHttpUrl.get_default_partsNr   )r.   r/   r0   rg   r   rj   r   rx   r3   r3   r3   r4   r?     s    r?   c                   @   s   e Zd ZdhZdZdZdS )r>   fileFr3   N)r.   r/   r0   rf   ri   r   r3   r3   r3   r4   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   r6   rp   c                   s   t  j|i | || _d S rN   )r   rq   r   )rr   r   r   rp   r   r3   r4   rq     s   
zMultiHostDsn.__init__rl   rM   c                 C   r   rN   )r[   r   r   r3   r3   r4   r     r   zMultiHostDsn._match_urlTrz   r#   r   c                    s   t  j|ddS )NF)r   )r   r   )ro   rz   r   r   r3   r4   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*   )r7   r9   r8   r:   r*   r   c                 S   s   g | ]}|d  qS )r:   r3   )r   hpr3   r3   r4   
<listcomp>  s    z+MultiHostDsn._build_url.<locals>.<listcomp>r$   r%   r&   r+   r,   r-   )r$   r%   r&   r+   r,   r-   r9   r   r   r:   r7   r8   r9   rk   )
rd   r   splitr   r   ry   r   appendr   any)ro   r   rl   rz   Zhosts_partsZhost_rer7   r   r8   r9   r:   r*   Z	host_partr3   r3   r4   r     sR   


zMultiHostDsn._build_urlr   )r.   r/   r0   r<   r   r   r   r   rq   r   r1   r   r   r   r;   r   r   r   r3   r3   r   r4   r     s    
((r   c                   @   s   e Zd Zh dZdZdZdS )rF   >	   zpostgresql+pygresqlzpostgresql+psycopgzpostgresql+asyncpgzpostgresql+psycopg2zpostgresql+psycopg2cffi
postgresqlzpostgresql+pg8000postgreszpostgresql+py-postgresqlTr3   N)r.   r/   r0   rf   rh   r   r3   r3   r3   r4   rF     s    rF   c                   @   s   e Zd Zh dZdZdS )rG   >   zcockroachdb+psycopg2zcockroachdb+asyncpgZcockroachdbTN)r.   r/   r0   rf   rh   r3   r3   r3   r4   rG     s    rG   c                   @   r   )rH   ZamqpZamqpsFN)r.   r/   r0   rf   ri   r3   r3   r3   r4   rH     s    rH   c                   @   s*   e Zd ZdZddhZdZeddd	Zd
S )rI   r3   ZredisZredissFrz   r#   rM   c                 C   s    | d s
| d s
dnddddS )Nr'   r(   	localhost Z6379z/0)r)   r*   r+   r3   r   r3   r3   r4   rx     s   zRedisDsn.get_default_partsNr   )r.   r/   r0   r   rf   ri   r   rx   r3   r3   r3   r4   rI     s    rI   c                   @       e Zd ZdhZedddZdS )	rJ   Zmongodbrz   r#   rM   c                 C   s   ddiS )Nr*   Z27017r3   r   r3   r3   r4   rx     s   zMongoDsn.get_default_partsNr   r.   r/   r0   rf   r   rx   r3   r3   r3   r4   rJ     s    rJ   c                   @   r   )	rK   Zkafkarz   r#   rM   c                 C   s
   dddS )Nr   Z9092)r)   r*   r3   r   r3   r3   r4   rx   "  s   zKafkaDsn.get_default_partsNr   r   r3   r3   r3   r4   rK     s    rK   Tre   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   	namespacer3   r3   r4   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)er3   r3   r4   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 )rA   r{   rM   Nc                 C      |j ddd d S )Nstringemailr   r}   updater   r3   r3   r4   r   H     zEmailStr.__modify_schema__r   c                 c   s    t   tV  | jV  d S rN   )r   r   r   r   r3   r3   r4   r   L  s   zEmailStr.__get_validators__r   c                 C   s   t |d S )Nr   )rL   ro   r   r3   r3   r4   r   T  r   zEmailStr.validater   )r.   r/   r0   r   r   r1   r   r   r   r   r   r3   r3   r3   r4   rA   G  s    rA   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 )rB   namer   r   r   c                 C   s   || _ || _d S rN   r   )rr   r   r   r3   r3   r4   rq   \  s   
zNameEmail.__init__otherrM   c                 C   s"   t |to| j| jf|j|jfkS rN   )
isinstancerB   r   r   )rr   r   r3   r3   r4   __eq__`  s   "zNameEmail.__eq__r{   Nc                 C   r   )Nr   z
name-emailr   r   r   r3   r3   r4   r   c  r   zNameEmail.__modify_schema__r   c                 c   s    t   | jV  d S rN   )r   r   r   r3   r3   r4   r   g  s   zNameEmail.__get_validators__r   c                 C   s"   |j | kr|S t|}| t| S rN   )r   r   rL   r   r3   r3   r4   r   m  s   
zNameEmail.validatec                 C   s   | j  d| j dS )Nz <>r   r   r3   r3   r4   __str__t  s   zNameEmail.__str__r   )r.   r/   r0   r   r1   rq   r   r;   r   r   r   r   r   r   r   r3   r3   r3   r4   rB   Y  s    rB   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 )rC   r3   r{   rM   Nc                 C   r   )Nr   Zipvanyaddressr   r   r   r3   r3   r4   r   {  r   zIPvAnyAddress.__modify_schema__r   c                 c   r   rN   r   r   r3   r3   r4   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 rN   )r   
ValueErrorr   r   ZIPvAnyAddressErrorr   r3   r3   r4   r        

zIPvAnyAddress.validater   )r.   r/   r0   r   r   r   r1   r   r   r   r   bytesr   r   r   r   r3   r3   r3   r4   rC   x  s    *rC   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 )rD   r3   r{   rM   Nc                 C   r   )Nr   Zipvanyinterfacer   r   r   r3   r3   r4   r     r   z!IPvAnyInterface.__modify_schema__r   c                 c   r   rN   r   r   r3   r3   r4   r     r   z"IPvAnyInterface.__get_validators__r   c                 C   r   rN   )r   r   r   r   ZIPvAnyInterfaceErrorr   r3   r3   r4   r     r   zIPvAnyInterface.validater   )r.   r/   r0   r   r   r   r1   r   r   r   NetworkTyper   r   r   r   r3   r3   r3   r4   rD     s     rD   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 )rE   r{   rM   Nc                 C   r   )Nr   Zipvanynetworkr   r   r   r3   r3   r4   r     r   zIPvAnyNetwork.__modify_schema__r   c                 c   r   rN   r   r   r3   r3   r4   r     r   z IPvAnyNetwork.__get_validators__r   c                 C   r   rN   )r   r   r   r   ZIPvAnyNetworkErrorr   r3   r3   r4   r     s   

zIPvAnyNetwork.validater   )r.   r/   r0   r   r   r1   r   r   r   r   r   r   r   r   r3   r3   r3   r4   rE     s     rE   z([\w ]*?) *<(.*)> *r   c           	   
   C   s   t du rt  t| }d}|r| \}} |  }z	t j|dd}W n t jy4 } ztj	|d}~ww t
|drL|j}|dusCJ |pG|j}||fS |d}|d| }||d  }|pb||| 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   pretty_email_regexr   groupsr   rL   ZEmailNotValidErrorr   Z
EmailErrorhasattrr   
local_partindexr   )	r   r   r   r   rz   r   Zat_indexr   Zglobal_partr3   r3   r4   rL     s,   



rL   )rM   N)YrP   	ipaddressr   r   r   r   r   r   r   r	   typingr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   Z
validatorsr   r   r   Ztyping_extensionsr   r   r    fieldsr!   r"   r   r#   r6   r   r1   r   r   r   __all__rO   rZ   r_   ra   rc   rT   rR   rS   rU   rV   rW   rY   r[   r`   rb   rd   r<   r=   r?   r>   r   rF   rG   rH   rI   rJ   rK   r;   r@   r   rA   rB   rC   rD   rE   rQ   r   rL   r3   r3   r3   r4   <module>   s    (D
*
	
 e@	



"