o
    Ú­jlV  ã                   @   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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 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   úQ/var/www/html/CropPilot/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rŠd}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 ¡ ‚|rŠd}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@	ùþýüûú
ù
ø

"