U
    ={flV                     @   sr  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rd 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 Z2ddddddddddddddd d!d"gZ3da4da5da6da7da8d#Z9d$Z:d%Z;d&Z<d'Z=d(Z>ee/ d)d*d+Z?ee/ d)d,d-Z@ee/ d)d.d/ZAee/ d)d0d1ZBee/ d)d2d3ZCG d4d de/ZDG d5d deDZEG d6d deEZFG d7d deDZGG d8d9 d9eDZHG d:d deHZIG d;d deDZJG d<d deDZKG d=d deDZLG d>d  d eDZMG d?d! d!eDZNd@dAdBd@d@ddCeOe1e1eOeOeee/  eeD dDdEdZPdd)dFdGZQG dHd de/ZRG dId deZSG dJd deZTG dKd deZUG dLd de	ZVe WdMZXdNZYee/ ee/e/f dOdPd"ZZdS )Q    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   S/var/www/html/Darija-Ai-API/env/lib/python3.8/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 k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    rY   c                   C   s0   t dk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   r2   r2   r2   r3   multi_host_url_regex{   s    r[   c                  C   s2   t d k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_endingr2   r2   r3   ascii_domain_regex   s     r_   c                  C   s2   t d kr.d} d}t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}))?\.?r\   r]   )_int_domain_regex_cacherP   rQ   rX   )Z	int_chunkZint_domain_endingr2   r2   r3   int_domain_regex   s
    ra   c                   C   s   t d krtttja t S rN   )_host_regex_cacherP   rQ   rT   rX   r2   r2   r2   r3   
host_regex   s    rc   c                       s6  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ee	 edddZdddddddddd	e	e	ee	 ee	 ee	 ee	 e	ee	 ee	 ee	 ee	 ddddZeddddddde	ee	 ee	 e	ee	 ee	 ee	 ee	 e	e	d
ddZeee	ef ddddZeddddZeedd d d!d"d#Zeee	 e	d$d d%d&d'Ze e	eee	  dd(d)Z!e ee	 dd*d+d,Z"ed9d$ed$d-d.d/Z#ed$e$e	ee	 e	ef d0d1d2Z%e d$d$d0d3d4Z&ed$d$d0d5d6Z'e	d fd7d8Z(  Z)S ):r;   T      Nallowed_schemesFtld_requireduser_requiredhost_requiredhidden_parts
r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   urlrM   c                 K   s    t | |d kr| jf |n|S rN   )r0   __new__build)clsrm   kwargsr2   r2   r3   rn      s    zAnyUrl.__new__r(   )	r$   r%   r6   r7   r8   r)   r*   r+   r,   )rm   r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   rM   c       
         C   sJ   t | || _|| _|| _|| _|| _|| _|| _|	| _	|
| _
|| _d S rN   )r0   __init__r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   )selfrm   r#   r$   r%   r6   r7   r8   r)   r*   r+   r,   r2   r2   r3   rr      s    
zAnyUrl.__init__)r$   r%   r)   r*   r+   r,   )
r#   r$   r%   r6   r)   r*   r+   r,   _kwargsrM   c                K   s   t f ||||||||d|	}
|d }|r4||7 }|rD|d| 7 }|sL|rT|d7 }||7 }|rd| jks~| |
d|kr|d| 7 }|r||7 }|r|d| 7 }|r|d| 7 }|S )N)r#   r$   r%   r6   r)   r*   r+   r,   z://:@r)   ?#)r"   rj   get_default_partsget)rp   r#   r$   r%   r6   r)   r*   r+   r,   rt   partsrm   r2   r2   r3   ro      s:    	"zAnyUrl.buildfield_schemarM   c                 C   s   t || j| jdd d S )Nuri)Z	minLengthZ	maxLengthformat)r   
min_length
max_lengthrp   r}   r2   r2   r3   __modify_schema__  s    zAnyUrl.__modify_schema__CallableGeneratorrL   c                 c   s   | j V  d S rN   validaterp   r2   r2   r3   __get_validators__  s    zAnyUrl.__get_validators__r    r   )valuefieldconfigrM   c                 C   s   |j | kr|S t|}| jr$| }ttt|||}| |}|sLtdtd|	 }| 
|}| |}| t|krtj|| d  d| |||S )NzURL regex failed unexpectedlyr"   )extra)	__class__r   strip_whitespacestripr   r0   r   
_match_urlAssertionError	groupdictapply_default_partsvalidate_partsendlenr   ZUrlExtraError
_build_url)rp   r   r   r   rm   mZoriginal_partsr{   r2   r2   r3   r   
  s    



zAnyUrl.validater"   r   rm   r{   rM   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)rp   r   rm   r{   r6   r7   r8   r9   r2   r2   r3   r      s    
zAnyUrl._build_urlc                 C   s   t  | S rN   )rY   matchrm   r2   r2   r3   r   6  s    zAnyUrl._match_url)r)   rM   c                 C   s    | d k	rt | dkrt d S )Ni  )intr   ZUrlPortError)r)   r2   r2   r3   _validate_port:  s    zAnyUrl._validate_portr{   validate_portrM   c                 C   sp   |d }|dkrt  | jr<| | jkr<t t| j|rN| |d  |d }| jrl|dkrlt  |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)rp   r{   r   r#   r$   r2   r2   r3   r   ?  s    zAnyUrl.validate_partsr{   rM   c           	      C   s&  d\}}}dD ]}|| }|r|} q(q|d kr@| j r>t n|dkrd}t |}|d krt |}|d kr~t d}|d}|d kr|st |}|d k	st|d}d}|d k	r|dd  }n| jrt	 |rd}d}|
d	d
}|d k	r|
d	d
}||||fS )N)NNF)r(   r&   r'   r(   FTr7   rd   Z
int_domainidnaascii)ri   r   ZUrlHostErrorr_   	fullmatchra   groupr   rg   ZUrlHostTldErrorencodedecode)	rp   r{   r7   r8   r9   fr6   Zis_internationaldr2   r2   r3   r   U  sD    





zAnyUrl.validate_hostc                 C   s   i S rN   r2   r{   r2   r2   r3   ry     s    zAnyUrl.get_default_partsc                 C   s,   |  | D ]\}}|| s|||< q|S rN   )ry   items)rp   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   s0   | ](}t  |d k	r| dt  |V  qd S )N=)getattr).0nrs   r2   r3   	<genexpr>  s      z"AnyUrl.__repr__.<locals>.<genexpr>())join	__slots__r   r-   super__repr__)rs   r   r   r   r3   r     s    zAnyUrl.__repr__)T)*r-   r.   r/   r   r   r   rf   r   r   r0   r1   rg   r:   rh   ri   r   rj   r   r   r   objectrn   rr   classmethodro   r   r   r   r   r   r   r   staticmethodr   r   r   r   r   ry   r   r   __classcell__r2   r2   r   r3   r;      s   
+")c                   @   s   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   c                   @   s.   e Zd ZdZdZdhZedddddZdS )	r>   Ti#  r)   r"   r   c                 C   s   d| d dkrdndiS )Nr)   r#   r   80443r2   r   r2   r2   r3   ry     s    zHttpUrl.get_default_partsN)r-   r.   r/   rg   r   rj   r   ry   r2   r2   r2   r3   r>     s
   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   c                       s   e Zd Zejd Zddeeed  ed fddZe	e
eee
  ddd	Zeddedd fddZeee
 e
dd dddZ  ZS )MultiHostDsn)hostsNr5   )argsr   rq   c                   s   t  j|| || _d S rN   )r   rr   r   )rs   r   r   rq   r   r2   r3   rr     s    zMultiHostDsn.__init__rl   c                 C   s   t  | S rN   )r[   r   r   r2   r2   r3   r     s    zMultiHostDsn._match_urlTr"   r   c                    s   t  j|ddS )NF)r   )r   r   )rp   r{   r   r   r2   r3   r     s    zMultiHostDsn.validate_partsr   c                 C   s   g }t  }| d dD ]N}|| }| |\}}}	}
|d}| | |||	||
|d qt|dkr| t	dd |D rd n||d |d	 |d
 |d |d |d d |d	S |d }| |d rd n||d |d	 |d
 |d |d |d |d|d |d |d dS 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   rz   r   appendr   any)rp   r   rm   r{   Zhosts_partsZhost_rer6   r   r7   r8   r9   r)   Z	host_partr2   r2   r3   r     sR    


zMultiHostDsn._build_url)T)r-   r.   r/   r;   r   r   r   r   rr   r   r0   r   r   r   r:   r   r   r   r2   r2   r   r3   r     s   
$r   c                	   @   s*   e Zd Zddddddddd	h	Zd
ZdZdS )rE   postgres
postgresqlzpostgresql+asyncpgzpostgresql+pg8000zpostgresql+psycopgzpostgresql+psycopg2zpostgresql+psycopg2cffizpostgresql+py-postgresqlzpostgresql+pygresqlTr2   N)r-   r.   r/   rf   rh   r   r2   r2   r2   r3   rE     s   c                   @   s   e Zd ZdddhZdZdS )rF   Zcockroachdbzcockroachdb+psycopg2zcockroachdb+asyncpgTN)r-   r.   r/   rf   rh   r2   r2   r2   r3   rF     s
   c                   @   s   e Zd ZddhZdZdS )rG   ZamqpZamqpsFN)r-   r.   r/   rf   ri   r2   r2   r2   r3   rG     s   c                   @   s0   e Zd ZdZddhZdZedddddZd	S )
rH   r2   ZredisZredissFr"   r   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   ry     s    zRedisDsn.get_default_partsN)r-   r.   r/   r   rf   ri   r   ry   r2   r2   r2   r3   rH     s
   c                   @   s&   e Zd ZdhZedddddZdS )rI   Zmongodbr"   r   c                 C   s   ddiS )Nr)   Z27017r2   r   r2   r2   r3   ry     s     zMongoDsn.get_default_partsNr-   r.   r/   rf   r   ry   r2   r2   r2   r3   rI     s   c                   @   s&   e Zd ZdhZedddddZdS )rJ   Zkafkar"   r   c                 C   s
   dddS )Nr   Z9092)r(   r)   r2   r   r2   r2   r3   ry   "  s    zKafkaDsn.get_default_partsNr   r2   r2   r2   r3   rJ     s   Trd   re   r   r   r   rg   ri   rf   )r   r   r   rg   ri   rf   rM   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    
c               
   C   s>   zdd l a W n, tk
r8 }  ztd| W 5 d } ~ X Y nX d S )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eeef ddddZeddddZee	e ed	d
dZ
dS )r@   Nr|   c                 C   s   |j ddd d S )Nstringemailr   r   updater   r2   r2   r3   r   H  s    zEmailStr.__modify_schema__r   rL   c                 c   s   t   tV  | jV  d S rN   )r   r   r   r   r2   r2   r3   r   L  s    zEmailStr.__get_validators__r   rM   c                 C   s   t |d S )Nrd   )rK   rp   r   r2   r2   r3   r   T  s    zEmailStr.validate)r-   r.   r/   r   r   r0   r   r   r   r   r   r2   r2   r2   r3   r@   G  s   c                   @   s   e Zd ZdZeedddZeedddZe	e
eef ddd	d
Ze	ddddZe	ed dddZedddZdS )rA   namer   c                 C   s   || _ || _d S rN   r   )rs   r   r   r2   r2   r3   rr   \  s    zNameEmail.__init__)otherrM   c                 C   s"   t |to | j| jf|j|jfkS rN   )
isinstancerA   r   r   )rs   r   r2   r2   r3   __eq__`  s    zNameEmail.__eq__Nr|   c                 C   s   |j ddd d S )Nr   z
name-emailr   r   r   r2   r2   r3   r   c  s    zNameEmail.__modify_schema__r   rL   c                 c   s   t   | jV  d S rN   )r   r   r   r2   r2   r3   r   g  s    zNameEmail.__get_validators__r   c                 C   s"   |j | kr|S t|}| t| S rN   )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   r0   rr   r   r:   r   r   r   r   r   r   r   r2   r2   r2   r3   rA   Y  s   c                   @   sd   e Zd ZdZeeeef ddddZedddd	Z	ee
eeef e
eef d
ddZdS )rB   r2   Nr|   c                 C   s   |j ddd d S )Nr   Zipvanyaddressr   r   r   r2   r2   r3   r   {  s    zIPvAnyAddress.__modify_schema__r   rL   c                 c   s   | j V  d S rN   r   r   r2   r2   r3   r     s    z IPvAnyAddress.__get_validators__r   c                 C   sL   z
t |W S  tk
r   Y nX z
t|W S  tk
rF   t Y nX d S rN   )r   
ValueErrorr   r   ZIPvAnyAddressErrorr   r2   r2   r3   r     s    

zIPvAnyAddress.validate)r-   r.   r/   r   r   r   r0   r   r   r   r   bytesr   r   r   r   r2   r2   r2   r3   rB   x  s   c                   @   sZ   e Zd ZdZeeeef ddddZedddd	Z	ee
eeef d
ddZdS )rC   r2   Nr|   c                 C   s   |j ddd d S )Nr   Zipvanyinterfacer   r   r   r2   r2   r3   r     s    z!IPvAnyInterface.__modify_schema__r   rL   c                 c   s   | j V  d S rN   r   r   r2   r2   r3   r     s    z"IPvAnyInterface.__get_validators__r   c                 C   sL   z
t |W S  tk
r   Y nX z
t|W S  tk
rF   t Y nX d S rN   )r   r   r   r   ZIPvAnyInterfaceErrorr   r2   r2   r3   r     s    

zIPvAnyInterface.validate)r-   r.   r/   r   r   r   r0   r   r   r   NetworkTyper   r   r   r   r2   r2   r2   r3   rC     s   c                   @   sV   e Zd Zeeeef ddddZeddddZee	e
eef d	d
dZdS )rD   Nr|   c                 C   s   |j ddd d S )Nr   Zipvanynetworkr   r   r   r2   r2   r3   r     s    zIPvAnyNetwork.__modify_schema__r   rL   c                 c   s   | j V  d S rN   r   r   r2   r2   r3   r     s    z IPvAnyNetwork.__get_validators__r   c                 C   sL   z
t |W S  tk
r   Y nX z
t|W S  tk
rF   t Y nX d S rN   )r   r   r   r   ZIPvAnyNetworkErrorr   r2   r2   r3   r     s    

zIPvAnyNetwork.validate)r-   r.   r/   r   r   r0   r   r   r   r   r   r   r   r   r2   r2   r2   r3   rD     s   z([\w ]*?) *<(.*)> *i   r   c           	   
   C   s   t dkrt  t| tkr"t t| }d}|r@| \}} | 	 }zt j
|dd}W n, t jk
r } ztj|W 5 d}~X Y nX t|dr|j}|dk	st|p|j}||fS |d}|d| }||d  }|p||| fS d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
normalizedrv   )r   r   r   MAX_EMAIL_LENGTHr   Z
EmailErrorpretty_email_regexr   groupsr   rK   ZEmailNotValidErrorhasattrr   r   
local_partindexr   )	r   r   r   r   r{   r   Zat_indexr   Zglobal_partr2   r2   r3   rK     s,    



)[rP   	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   Ztyping_extensionsr   Zpydantic.v1.configr   Zpydantic.v1.fieldsr    Zpydantic.v1.typingr!   r   r"   r5   r   r0   r   r   r   __all__rO   rZ   r^   r`   rb   rT   rR   rS   rU   rV   rW   rY   r[   r_   ra   rc   r;   r<   r>   r=   r   rE   rF   rG   rH   rI   rJ   r:   r?   r   r@   rA   rB   rC   rD   rQ   r   r   rK   r2   r2   r2   r3   <module>   s   (
D*
	
 e@	

