o
    pfR                     @  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 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rld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gdf Z/	 eee+dg ddf Z0	 eee+dg ddf Z1	 eee+ddgdf Z2	 eee+d d!gd"d#d$d%f Z3	 eee+d&d'gd(d)f Z4	 eee+d*gd"d+d,f Z5	 eee+g d-d"d.d,f Z6	 eee+g d/d0d)f Z7	 eee+g d1d0d)f Z8	 dJd4d5Z9er+ee:d6f Z;nG d7d8 d8Z;G d9d: d:ej<Z=G d;d< d<Z>G d=d> d>Z?G d?d@ d@Z@dKdBdCZAeA ZBdDZC	 dLdHdIZDe eEZFdS )MzEThe 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	TypeAlias   )_fields_repr_schema_generation_shared)getattr_migration)GetCoreSchemaHandler)JsonSchemaValuez7str | bytes | int | tuple[str | bytes | int, str | int]r   NetworkType)AnyUrl
AnyHttpUrlFileUrlHttpUrlUrlConstraintsEmailStr	NameEmailIPvAnyAddressIPvAnyInterfaceIPvAnyNetworkPostgresDsnCockroachDsnAmqpDsnRedisDsnMongoDsnKafkaDsnNatsDsnvalidate_emailMySQLDsn
MariaDBDsnc                   @  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)hashr.   r/   tupler0   r1   r2   r3   self r;   J/home/ertert/spirit/venv/lib/python3.10/site-packages/pydantic/networks.py__hash__G   s   zUrlConstraints.__hash__)r4   r5   )__name__
__module____qualname____doc__r.   __annotations__r/   r0   r1   r2   r3   r=   r;   r;   r;   r<   r   3   s   
 r   httphttps)r/   i#  )r.   r/   fileT)	postgres
postgresqlzpostgresql+asyncpgzpostgresql+pg8000zpostgresql+psycopgzpostgresql+psycopg2zpostgresql+psycopg2cffizpostgresql+py-postgresqlzpostgresql+pygresql)r0   r/   )cockroachdbzcockroachdb+psycopg2zcockroachdb+asyncpgamqpamqpsredisrediss	localhosti  z/0)r/   r1   r2   r3   mongodbzmongodb+srvii  )r/   r2   kafkai#  )r/   r1   r2   )natstlswsi~  )mysqlzmysql+mysqlconnectorzmysql+aiomysqlzmysql+asyncmyzmysql+mysqldbzmysql+pymysqlzmysql+cymysqlzmysql+pyodbci  )mariadbzmariadb+mariadbconnectorzmariadb+pymysqlr4   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)er;   r;   r<   import_email_validatori  s   
r\   .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   r4   core_schema.CoreSchemac                 C  s   t   t| jt S r6   )r\   r    no_info_after_validator_function	_validate
str_schemaclsr]   r_   r;   r;   r<   __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re   r   rg   field_schemar;   r;   r<   __get_pydantic_json_schema__     z%EmailStr.__get_pydantic_json_schema___EmailStr__input_valuestrc                 C  s   t |d S )Nr   )r+   )re   ru   r;   r;   r<   rb     s   zEmailStr._validateNr]   r^   r_   r   r4   r`   r   r`   rg   rh   r4   r   )ru   rv   r4   rv   )r>   r?   r@   rA   classmethodrf   rs   rb   r;   r;   r;   r<   r   w  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
    ```
    namerk   r{   rv   rk   c                 C  s   || _ || _d S r6   rz   )r:   r{   rk   r;   r;   r<   __init__  s   
zNameEmail.__init__otherr   r4   boolc                 C  s"   t |to| j| jf|j|jfkS r6   )
isinstancer    r{   rk   )r:   r}   r;   r;   r<   __eq__  s   "zNameEmail.__eq__r   r`   rg   rh   r   c                 C  ri   )Nrj   z
name-emailrl   ro   rq   r;   r;   r<   rs     rt   z&NameEmail.__get_pydantic_json_schema__r]   r^   r_   r   c                 C  s6   t   tj| j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serialization)r\   r   ra   rb   union_schemais_instance_schemarc   to_string_ser_schemard   r;   r;   r<   rf     s   z&NameEmail.__get_pydantic_core_schema___NameEmail__input_valueNameEmail | strc                 C  s$   t || r|S t|\}}| ||S r6   )r   r+   )re   r   r{   rk   r;   r;   r<   rb     s   

zNameEmail._validatec                 C  s   | j  d| j dS )Nz <>rz   r9   r;   r;   r<   __str__  s   zNameEmail.__str__N)r{   rv   rk   rv   )r}   r   r4   r~   rx   rw   )r   r   r4   r    )r4   rv   )r>   r?   r@   rA   	__slots__r|   r   ry   rs   rf   rb   r   r;   r;   r;   r<   r      s    #

r    c                   @  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',
            }
        ]
        '''
    ```
    r;   valuer   r4   IPv4Address | IPv6Addressc                 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   re   r   r;   r;   r<   __new__     


zIPvAnyAddress.__new__r   r`   rg   rh   r   c                 C     i }|j ddd |S )Nrj   ipvanyaddressrl   ro   rq   r;   r;   r<   rs   "     z*IPvAnyAddress.__get_pydantic_json_schema__r]   r^   r_   r   c                 C     t j| jt  dS Nr   r    no_info_plain_validator_functionrb   r   rd   r;   r;   r<   rf   *     
z*IPvAnyAddress.__get_pydantic_core_schema___IPvAnyAddress__input_valuec                 C     | |S r6   r;   )re   r   r;   r;   r<   rb   4     zIPvAnyAddress._validateN)r   r   r4   r   rx   rw   )r   r   r4   r   
r>   r?   r@   rA   r   r   ry   rs   rf   rb   r;   r;   r;   r<   r!     s    
	r!   c                   @  r   )r"   #Validate an IPv4 or IPv6 interface.r;   r   r   r4   IPv4Interface | IPv6Interfacec                 C  r   )r   ip_any_interfacez+value is not a valid IPv4 or IPv6 interface)r   r   r   r   r   r;   r;   r<   r   >  r   zIPvAnyInterface.__new__r   r`   rg   rh   r   c                 C  r   )Nrj   ipvanyinterfacerl   ro   rq   r;   r;   r<   rs   J  r   z,IPvAnyInterface.__get_pydantic_json_schema__r]   r^   r_   r   c                 C  r   r   r   rd   r;   r;   r<   rf   R  r   z,IPvAnyInterface.__get_pydantic_core_schema___IPvAnyInterface__input_valuec                 C  r   r6   r;   )re   r   r;   r;   r<   rb   \  r   zIPvAnyInterface._validateN)r   r   r4   r   rx   rw   )r   r   r4   r   r   r;   r;   r;   r<   r"   9  s    
	r"   c                   @  r   )r#   !Validate an IPv4 or IPv6 network.r;   r   r   r4   IPv4Network | IPv6Networkc                 C  r   )r   ip_any_networkz)value is not a valid IPv4 or IPv6 network)r   r   r	   r   r   r;   r;   r<   r   f  s   


zIPvAnyNetwork.__new__r   r`   rg   rh   r   c                 C  r   )Nrj   ipvanynetworkrl   ro   rq   r;   r;   r<   rs   t  r   z*IPvAnyNetwork.__get_pydantic_json_schema__r]   r^   r_   r   c                 C  r   r   r   rd   r;   r;   r<   rf   |  r   z*IPvAnyNetwork.__get_pydantic_core_schema___IPvAnyNetwork__input_valuec                 C  r   r6   r;   )re   r   r;   r;   r<   rb     r   zIPvAnyNetwork._validateN)r   r   r4   r   rx   rw   )r   r   r4   r   r   r;   r;   r;   r<   r#   a  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_groupr;   r;   r<   _build_pretty_email_regex  s
   r   i   r   rv   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   )rX   r\   lenMAX_EMAIL_LENGTHr   pretty_email_regex	fullmatchgroupsstripr+   EmailNotValidErrorrv   args
normalized
local_part)r   mr{   unquoted_namequoted_namerk   partsr[   r;   r;   r<   r+     s8   


r+   )r4   rU   )r4   r   )r   rv   r4   r   )GrA   
__future__r   _annotationsdataclasses_dataclassesr   importlib.metadatar   	ipaddressr   r   r   r   r   r	   typingr
   r   pydantic_corer   r   r   r   typing_extensionsr   r   	_internalr   r   r   
_migrationr   annotated_handlersr   json_schemar   rX   r   rB   __all__	dataclassPydanticMetadatar   r   r   r   r   r$   r%   r&   r'   r(   r)   r*   r,   r-   r\   rv   r   Representationr    r!   r"   r#   r   r   r   r+   r>   __getattr__r;   r;   r;   r<   <module>   s      J;


-RC(
*
)