U
    nËjlV  ã                   @   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   ú8/tmp/pip-unpacked-wheel-zvl9l234/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 }|rŠd| 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r–t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r‚tƒ  |¡}|d kr~t ¡ ‚d}| d¡}|d kr¾|s¾tƒ  |¡}|d k	s°t‚| d¡}d}|d k	rÔ|dd … }n| jrât 	¡ ‚|�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 ƒƒr�d n||d |d	 |d
 |d |d |d d |d�	S |d }| |d rÖd 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   ZpostgresZ
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	s¤t‚|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@	ù
ø
