o
    Rh[                     @  s  U d Z ddlmZ ddlZddlZddlmZ ddl	m
Z
mZmZmZmZmZ ddlmZmZ ddlmZmZmZmZ ddlmZmZmZ d	d
lmZmZmZ d	dl m!Z! d	dl"m#Z# d	dl$m%Z% ernddl&a&dZ'de(d< nda&g dZ)ej*G dd dej+Z,eZ-	 eee,ddgdf Z.	 eee,dddgdf Z/	 eee,ddgdf Z0	 eee,dddgdf Z1	 eee,dgdf Z2	 eee,dgdf Z3	 eee,dg ddf Z4	 eee,dg d df Z5	 eee,d!d"gdf Z6	 eee,d#d$gd%d&d'd(f Z7	 eee,d)d*gd+d,f Z8	 eee,d-gd%d.d/f Z9	 eee,g d0d%d1d/f Z:	 eee,g d2d3d,f Z;	 eee,g d4d3d,f Z<	 eee,d5d6gd%d7d/f Z=	 eee,d8gdd9f Z>	 dXd<d=Z?erkee@d>f ZAnG d?d@ d@ZAG dAdB dBejBZCdCZDde(dD< dEZEde(dF< dGZFde(dH< ereDZGeEZHeFZInG dIdJ dJZGG dKdL dLZHG dMdN dNZIdYdPdQZJeJ ZKdRZL	 dZdVdWZMe!eNZOdS )[zEThe networks module contains types for common network-related fields.    )annotationsN)version)IPv4AddressIPv4InterfaceIPv4NetworkIPv6AddressIPv6InterfaceIPv6Network)TYPE_CHECKINGAny)MultiHostUrlPydanticCustomErrorUrlcore_schema)	AnnotatedSelf	TypeAlias   )_fields_repr_schema_generation_shared)getattr_migration)GetCoreSchemaHandler)JsonSchemaValuez7str | bytes | int | tuple[str | bytes | int, str | int]r   NetworkType)AnyUrl
AnyHttpUrlFileUrlFtpUrlHttpUrlWebsocketUrlAnyWebsocketUrlUrlConstraintsEmailStr	NameEmailIPvAnyAddressIPvAnyInterfaceIPvAnyNetworkPostgresDsnCockroachDsnAmqpDsnRedisDsnMongoDsnKafkaDsnNatsDsnvalidate_emailMySQLDsn
MariaDBDsnClickHouseDsnSnowflakeDsnc                   @  sd   e Zd ZU dZdZded< dZded< dZded< dZd	ed
< dZ	ded< dZ
d	ed< dddZdS )r"   a  Url constraints.

    Attributes:
        max_length: The maximum length of the url. Defaults to `None`.
        allowed_schemes: The allowed schemes. Defaults to `None`.
        host_required: Whether the host is required. Defaults to `None`.
        default_host: The default host. Defaults to `None`.
        default_port: The default port. Defaults to `None`.
        default_path: The default path. Defaults to `None`.
    Nz
int | None
max_lengthzlist[str] | Noneallowed_schemeszbool | Nonehost_requiredz
str | Nonedefault_hostdefault_portdefault_pathreturnintc                 C  s2   t | j| jd urt| jnd | j| j| j| jfS N)hashr4   r5   tupler6   r7   r8   r9   self rA   S/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/pydantic/networks.py__hash__M   s   zUrlConstraints.__hash__)r:   r;   )__name__
__module____qualname____doc__r4   __annotations__r5   r6   r7   r8   r9   rC   rA   rA   rA   rB   r"   9   s   
 r"   httphttps)r5   i#  )r4   r5   wswssfileftpT)	postgres
postgresqlzpostgresql+asyncpgzpostgresql+pg8000zpostgresql+psycopgzpostgresql+psycopg2zpostgresql+psycopg2cffizpostgresql+py-postgresqlzpostgresql+pygresql)r6   r5   )cockroachdbzcockroachdb+psycopg2zcockroachdb+asyncpgamqpamqpsredisrediss	localhosti  z/0)r5   r7   r8   r9   mongodbzmongodb+srvii  )r5   r8   kafkai#  )r5   r7   r8   )natstlsrK   rL   i~  )mysqlzmysql+mysqlconnectorzmysql+aiomysqlzmysql+asyncmyzmysql+mysqldbzmysql+pymysqlzmysql+cymysqlzmysql+pyodbci  )mariadbzmariadb+mariadbconnectorzmariadb+pymysqlzclickhouse+nativezclickhouse+asynchi(#  	snowflake)r5   r6   r:   Nonec               
   C  sR   zdd l a W n ty }  ztd| d } ~ ww tddd dks'tdd S )Nr   zCemail-validator is not installed, run `pip install pydantic[email]`zemail-validator.2zKemail-validator version >= 2.0 required, run pip install -U email-validator)email_validatorImportErrorr   	partition)erA   rA   rB   import_email_validator  s   
re   .c                   @  s:   e Zd ZdZeddd	ZedddZedddZdS )r#   a   
        Info:
            To use this type, you need to install the optional
            [`email-validator`](https://github.com/JoshData/python-email-validator) package:

            ```bash
            pip install email-validator
            ```

        Validate email addresses.

        ```py
        from pydantic import BaseModel, EmailStr

        class Model(BaseModel):
            email: EmailStr

        print(Model(email='contact@mail.com'))
        #> email='contact@mail.com'
        ```
        _source	type[Any]_handlerr   r:   core_schema.CoreSchemac                 C  s   t   t| jt S r<   )re   r    no_info_after_validator_function	_validate
str_schemaclsrf   rh   rA   rA   rB   __get_pydantic_core_schema__  s   z%EmailStr.__get_pydantic_core_schema__r   handler._schema_generation_shared.GetJsonSchemaHandlerr   c                 C     ||}|j ddd |S )Nstringemailtypeformatupdatern   r   rp   field_schemarA   rA   rB   __get_pydantic_json_schema__     z%EmailStr.__get_pydantic_json_schema__input_valuestrc                C  s   t |d S )Nr   )r/   rn   r~   rA   rA   rB   rk     s   zEmailStr._validateNrf   rg   rh   r   r:   ri   r   ri   rp   rq   r:   r   )r~   r   r:   r   )rD   rE   rF   rG   classmethodro   r|   rk   rA   rA   rA   rB   r#     s    r#   c                   @  s\   e Zd ZdZdZd#ddZd$ddZed%ddZed&ddZ	ed'ddZ
d(d d!Zd"S ))r$   a  
    Info:
        To use this type, you need to install the optional
        [`email-validator`](https://github.com/JoshData/python-email-validator) package:

        ```bash
        pip install email-validator
        ```

    Validate a name and email address combination, as specified by
    [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322#section-3.4).

    The `NameEmail` has two properties: `name` and `email`.
    In case the `name` is not provided, it's inferred from the email address.

    ```py
    from pydantic import BaseModel, NameEmail

    class User(BaseModel):
        email: NameEmail

    user = User(email='Fred Bloggs <fred.bloggs@example.com>')
    print(user.email)
    #> Fred Bloggs <fred.bloggs@example.com>
    print(user.email.name)
    #> Fred Bloggs

    user = User(email='fred.bloggs@example.com')
    print(user.email)
    #> fred.bloggs <fred.bloggs@example.com>
    print(user.email.name)
    #> fred.bloggs
    ```
    namert   r   r   rt   c                 C  s   || _ || _d S r<   r   )r@   r   rt   rA   rA   rB   __init__  s   
zNameEmail.__init__otherr   r:   boolc                 C  s"   t |to| j| jf|j|jfkS r<   )
isinstancer$   r   rt   )r@   r   rA   rA   rB   __eq__  s   "zNameEmail.__eq__r   ri   rp   rq   r   c                 C  rr   )Nrs   z
name-emailru   rx   rz   rA   rA   rB   r|     r}   z&NameEmail.__get_pydantic_json_schema__rf   rg   rh   r   c              
   C  sB   t   t| jtjt tjt| t gdddt dS )Nname_email_typezInput is not a valid NameEmail)custom_error_typecustom_error_message)json_schemapython_schemaserialization)	re   r   rj   rk   json_or_python_schemarl   union_schemais_instance_schemato_string_ser_schemarm   rA   rA   rB   ro     s   z&NameEmail.__get_pydantic_core_schema__r~   
Self | strr   c                C  s$   t |trt|\}}| ||S |S r<   )r   r   r/   )rn   r~   r   rt   rA   rA   rB   rk   %  s   

zNameEmail._validatec                 C  s4   d| j v rd| j  d| j dS | j  d| j dS )N@"z" <>z <r   r?   rA   rA   rB   __str__-  s   
zNameEmail.__str__N)r   r   rt   r   )r   r   r:   r   r   r   )r~   r   r:   r   )r:   r   )rD   rE   rF   rG   	__slots__r   r   r   r|   ro   rk   r   rA   rA   rA   rB   r$     s    #

r$   zIPv4Address | IPv6AddressIPvAnyAddressTypezIPv4Interface | IPv6InterfaceIPvAnyInterfaceTypezIPv4Network | IPv6NetworkIPvAnyNetworkTypec                   @  H   e Zd ZdZdZdddZedddZedddZedddZ	dS )r%   a  Validate an IPv4 or IPv6 address.

        ```py
        from pydantic import BaseModel
        from pydantic.networks import IPvAnyAddress

        class IpModel(BaseModel):
            ip: IPvAnyAddress

        print(IpModel(ip='127.0.0.1'))
        #> ip=IPv4Address('127.0.0.1')

        try:
            IpModel(ip='http://www.example.com')
        except ValueError as e:
            print(e.errors())
            '''
            [
                {
                    'type': 'ip_any_address',
                    'loc': ('ip',),
                    'msg': 'value is not a valid IPv4 or IPv6 address',
                    'input': 'http://www.example.com',
                }
            ]
            '''
        ```
        rA   valuer   r:   r   c                 C  B   zt |W S  ty   Y nw zt|W S  ty    tddw )z!Validate an IPv4 or IPv6 address.ip_any_addressz)value is not a valid IPv4 or IPv6 address)r   
ValueErrorr   r   rn   r   rA   rA   rB   __new__^     


zIPvAnyAddress.__new__r   ri   rp   rq   r   c                 C     i }|j ddd |S )Nrs   ipvanyaddressru   rx   rz   rA   rA   rB   r|   j     z*IPvAnyAddress.__get_pydantic_json_schema__rf   rg   rh   r   c                 C     t j| jt  dS N)r   r    no_info_plain_validator_functionrk   r   rm   rA   rA   rB   ro   r     
z*IPvAnyAddress.__get_pydantic_core_schema__r~   c                C     | |S r<   rA   r   rA   rA   rB   rk   |     zIPvAnyAddress._validateN)r   r   r:   r   r   r   )r~   r   r:   r   
rD   rE   rF   rG   r   r   r   r|   ro   rk   rA   rA   rA   rB   r%   >  s    
	r%   c                   @  r   )r&   #Validate an IPv4 or IPv6 interface.rA   r   r   r:   r   c                 C  r   )r   ip_any_interfacez+value is not a valid IPv4 or IPv6 interface)r   r   r   r   r   rA   rA   rB   r     r   zIPvAnyInterface.__new__r   ri   rp   rq   r   c                 C  r   )Nrs   ipvanyinterfaceru   rx   rz   rA   rA   rB   r|     r   z,IPvAnyInterface.__get_pydantic_json_schema__rf   rg   rh   r   c                 C  r   r   r   rm   rA   rA   rB   ro     r   z,IPvAnyInterface.__get_pydantic_core_schema__r~   c                C  r   r<   rA   r   rA   rA   rB   rk     r   zIPvAnyInterface._validateN)r   r   r:   r   r   r   )r~   r   r:   r   r   rA   rA   rA   rB   r&     s    
	r&   c                   @  r   )r'   !Validate an IPv4 or IPv6 network.rA   r   r   r:   r   c                 C  r   )r   ip_any_networkz)value is not a valid IPv4 or IPv6 network)r   r   r	   r   r   rA   rA   rB   r     s   


zIPvAnyNetwork.__new__r   ri   rp   rq   r   c                 C  r   )Nrs   ipvanynetworkru   rx   rz   rA   rA   rB   r|     r   z*IPvAnyNetwork.__get_pydantic_json_schema__rf   rg   rh   r   c                 C  r   r   r   rm   rA   rA   rB   ro     r   z*IPvAnyNetwork.__get_pydantic_core_schema__r~   c                C  r   r<   rA   r   rA   rA   rB   rk     r   zIPvAnyNetwork._validateN)r   r   r:   r   r   r   )r~   r   r:   r   r   rA   rA   rA   rB   r'     s    
	r'   re.Pattern[str]c               	   C  s<   d} d|  d|  d}d}d}t d| d| d	| d
S )Nz[\w!#$%&\'*+\-/=?^_`{|}~]z((?:z+\s+)*z+)z"((?:[^"]|\")+)"z<\s*(.+)\s*>z\s*(?:|z)?\s*z\s*)recompile)
name_charsunquoted_name_groupquoted_name_groupemail_grouprA   rA   rB   _build_pretty_email_regex  s
   r   i   r   r   tuple[str, str]c              
   C  s   t du rt  t| tkrtddddt dit| }d}|r-| \}}} |p,|}|  }z	t j	|dd}W n t j
yU } ztdddt|jd	 i|d}~ww |j}|dus_J |pc|j}||fS )
a|  Email address validation using [email-validator](https://pypi.org/project/email-validator/).

    Note:
        Note that:

        * 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.
    Nvalue_errorz,value is not a valid email address: {reason}reasonzLength must not exceed z charactersF)check_deliverabilityr   )ra   re   lenMAX_EMAIL_LENGTHr   pretty_email_regex	fullmatchgroupsstripr/   EmailNotValidErrorr   args
normalized
local_part)r   mr   unquoted_namequoted_namert   partsrd   rA   rA   rB   r/     s8   


r/   )r:   r^   )r:   r   )r   r   r:   r   )PrG   
__future__r   _annotationsdataclasses_dataclassesr   importlib.metadatar   	ipaddressr   r   r   r   r   r	   typingr
   r   pydantic_corer   r   r   r   typing_extensionsr   r   r   	_internalr   r   r   
_migrationr   annotated_handlersr   r   r   ra   r   rH   __all__	dataclassPydanticMetadatar"   r   r   r   r!   r    r   r   r(   r)   r*   r+   r,   r-   r.   r0   r1   r2   r3   re   r   r#   Representationr$   r   r   r   r%   r&   r'   r   r   r   r/   rD   __getattr__rA   rA   rA   rB   <module>   s      L;


-YB'
*
)