
    df?P                    ~   U d Z ddlmZ ddlZddl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rddl#a#dZ$de%d<   nda#g dZ&ejN                   G d dejP                               Z)eZ*	 ee e)ddg      f   Z+	 ee e)dddg      f   Z,	 ee e)dg      f   Z-	 ee e)dg d      f   Z.	 ee e)dg d      f   Z/	 ee e)ddg      f   Z0	 ee e)dd gd!d"d#$      f   Z1	 ee e)d%d&gd'(      f   Z2	 ee e)d)gd!d*+      f   Z3	 ee e)g d,d-(      f   Z4	 ee e)g d.d-(      f   Z5	 d>d/Z6eree7d0f   Z8n
 G d1 d2      Z8 G d3 d4ejr                        Z: G d5 d6      Z; G d7 d8      Z< G d9 d:      Z=d?d;Z> e>       Z?d<Z@	 d@d=ZA eeB      ZCy)AzEThe networks module contains types for common network-related fields.    )annotationsN)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validate_emailMySQLDsn
MariaDBDsnc                  n    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Zy)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_pathc                    t        | j                  | j                  t        | j                        nd | j                  | j
                  | j                  | j                  f      S N)hashr.   r/   tupler0   r1   r2   r3   selfs    J/home/api-vastappli/venv/lib/python3.12/site-packages/pydantic/networks.py__hash__zUrlConstraints.__hash__E   s[    /3/C/C/Od**+UY""!!!!!!	
 		
    )returnint)__name__
__module____qualname____doc__r.   __annotations__r/   r0   r1   r2   r3   r;    r<   r:   r   r   1   sK    	 "J
!(,O%,!%M;%#L*##L*##L*#

r<   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   )mysqlzmysql+mysqlconnectorzmysql+aiomysqlzmysql+asyncmyzmysql+mysqldbzmysql+pymysqlzmysql+cymysqlzmysql+pyodbci  )mariadbzmariadb+mariadbconnectorzmariadb+pymysqlc                 H    	 dd l a y # t        $ r} t        d      | d } ~ ww xY w)Nr   zCemail-validator is not installed, run `pip install pydantic[email]`)email_validatorImportError)es    r:   import_email_validatorrX   ]  s,    h h_`fgghs    	!!.c                  ^    e Zd ZdZe	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Zedd       Zy)	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'
        ```
        c                z    t                t        j                  | j                  t        j                               S r5   )rX   r    no_info_after_validator_function	_validate
str_schemacls_source_handlers      r:   __get_pydantic_core_schema__z%EmailStr.__get_pydantic_core_schema__  s*     #$??{OeOeOghhr<   c                <     ||      }|j                  dd       |S )Nstringemailtypeformatupdater_   r   handlerfield_schemas       r:   __get_pydantic_json_schema__z%EmailStr.__get_pydantic_json_schema__  s'     #;/LXg>r<   c                    t        |      d   S )Nr   )r*   )r_   _EmailStr__input_values     r:   r\   zEmailStr._validate  s    !-033r<   Nr`   z	type[Any]ra   r   r=   core_schema.CoreSchemar   rr   rl   z._schema_generation_shared.GetJsonSchemaHandlerr=   r   )rp   strr=   rt   )r?   r@   rA   rB   classmethodrb   rn   r\   rD   r<   r:   r   r   i  s|    	, 
	i	i +	i $		i 
	i 
	 4	 ?m	 	  
	  
	4 
	4r<   r   c                  z    e Zd ZdZdZd
dZddZe	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Z	edd       Z
ddZy	)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
    ```
    namere   c                     || _         || _        y r5   rw   )r9   rx   re   s      r:   __init__zNameEmail.__init__  s    	
r<   c                    t        |t              xr1 | j                  | j                  f|j                  |j                  fk(  S r5   )
isinstancer    rx   re   )r9   others     r:   __eq__zNameEmail.__eq__  s6    %+dDJJ0GEJJX]XcXcKd0ddr<   c                <     ||      }|j                  dd       |S )Nrd   z
name-emailrf   ri   rk   s       r:   rn   z&NameEmail.__get_pydantic_json_schema__  s'     {+,?r<   c                    t                t        j                  | j                  t        j                  t        j
                  |       t        j                         gdd      t        j                               S )Nname_email_typezInput is not a valid NameEmail)custom_error_typecustom_error_messageserialization)rX   r   r[   r\   union_schemais_instance_schemar]   to_string_ser_schemar^   s      r:   rb   z&NameEmail.__get_pydantic_core_schema__  sb     	 ;;MM$$//4k6L6L6NO"3%E
 &::<
 	
r<   c                L    t        ||       r|S t        |      \  }} | ||      S r5   )r|   r*   )r_   _NameEmail__input_valuerx   re   s       r:   r\   zNameEmail._validate  s-    mS)  (7KD%tU##r<   c                :    | j                    d| j                   dS )Nz <>rw   r8   s    r:   __str__zNameEmail.__str__  s    ))Btzzl!,,r<   N)rx   rt   re   rt   )r}   r   r=   boolrs   rq   )r   zNameEmail | strr=   r    )r=   rt   )r?   r@   rA   rB   	__slots__rz   r~   ru   rn   rb   r\   r   rD   r<   r:   r    r      s    !F  Ie 0;i	  

 '
 
 	
 
  $ $-r<   r    c                  j    e Zd ZdZdZddZe	 	 	 	 	 	 d	d       Ze	 	 	 	 	 	 d
d       Zedd       Z	y)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',
            }
        ]
        '''
    ```
    rD   c                    	 t        |      S # t        $ r Y nw xY w	 t        |      S # t        $ r t        dd      w xY w)z!Validate an IPv4 or IPv6 address.ip_any_addressz)value is not a valid IPv4 or IPv6 address)r   
ValueErrorr   r   r_   values     r:   __new__zIPvAnyAddress.__new__  sU    	u%% 			eu%% 	e%&68cdd	e   
 	
( >c                0    i }|j                  dd       |S )Nrd   ipvanyaddressrf   ri   rk   s       r:   rn   z*IPvAnyAddress.__get_pydantic_json_schema__  "     /Br<   c                h    t        j                  | j                  t        j                               S Nr   r    no_info_plain_validator_functionr\   r   r^   s      r:   rb   z*IPvAnyAddress.__get_pydantic_core_schema__  )     ;;MM)I)I)K
 	
r<   c                     | |      S r5   rD   )r_   _IPvAnyAddress__input_values     r:   r\   zIPvAnyAddress._validate&      =!!r<   N)r   r   r=   IPv4Address | IPv6Addressrs   rq   )r   r   r=   r   
r?   r@   rA   rB   r   r   ru   rn   rb   r\   rD   r<   r:   r!   r!     s    : I
e 0;i	  

 '
 
 	
 
 " "r<   r!   c                  j    e Zd ZdZdZddZe	 	 	 	 	 	 d	d       Ze	 	 	 	 	 	 d
d       Zedd       Z	y)r"   #Validate an IPv4 or IPv6 interface.rD   c                    	 t        |      S # t        $ r Y nw xY w	 t        |      S # t        $ r t        dd      w xY w)r   ip_any_interfacez+value is not a valid IPv4 or IPv6 interface)r   r   r   r   r   s     r:   r   zIPvAnyInterface.__new__0  sU    	 '' 			i '' 	i%&8:ghh	ir   c                0    i }|j                  dd       |S )Nrd   ipvanyinterfacerf   ri   rk   s       r:   rn   z,IPvAnyInterface.__get_pydantic_json_schema__<  s#     2CDr<   c                h    t        j                  | j                  t        j                               S r   r   r^   s      r:   rb   z,IPvAnyInterface.__get_pydantic_core_schema__D  r   r<   c                     | |      S r5   rD   )r_   _IPvAnyInterface__input_values     r:   r\   zIPvAnyInterface._validateN  r   r<   N)r   r   r=   IPv4Interface | IPv6Interfacers   rq   )r   r   r=   r   r   rD   r<   r:   r"   r"   +  s    -I
i 0;i	  

 '
 
 	
 
 " "r<   r"   c                  j    e Zd ZdZdZddZe	 	 	 	 	 	 d	d       Ze	 	 	 	 	 	 d
d       Zedd       Z	y)r#   !Validate an IPv4 or IPv6 network.rD   c                    	 t        |      S # t        $ r Y nw xY w	 t        |      S # t        $ r t        dd      w xY w)r   ip_any_networkz)value is not a valid IPv4 or IPv6 network)r   r   r	   r   r   s     r:   r   zIPvAnyNetwork.__new__X  sU    	u%% 			eu%% 	e%&68cdd	er   c                0    i }|j                  dd       |S )Nrd   ipvanynetworkrf   ri   rk   s       r:   rn   z*IPvAnyNetwork.__get_pydantic_json_schema__f  r   r<   c                h    t        j                  | j                  t        j                               S r   r   r^   s      r:   rb   z*IPvAnyNetwork.__get_pydantic_core_schema__n  r   r<   c                     | |      S r5   rD   )r_   _IPvAnyNetwork__input_values     r:   r\   zIPvAnyNetwork._validatex  r   r<   N)r   r   r=   IPv4Network | IPv6Networkrs   rq   )r   r   r=   r   r   rD   r<   r:   r#   r#   S  s    +Ie 0;i	  

 '
 
 	
 
 " "r<   r#   c            	     ^    d} d|  d|  d}d}d}t        j                  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_groups       r:   _build_pretty_email_regexr   }  sP    -J!*VJ<rB+!K:: 34A6G5Hk]Z]^__r<   i   c           
        t         
t                t        |       t        kD  rt	        ddddt         di      t
        j                  |       }d}|r|j                         \  }}} |xs |}| j                         }	 t        j                  |d      }|j                  }|J |xs |j                  }||fS # t         j                  $ r+}t	        dddt        |j                  d	         i      |d}~ww xY w)
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   )rU   rX   lenMAX_EMAIL_LENGTHr   pretty_email_regex	fullmatchgroupsstripr*   EmailNotValidErrorrt   args
normalized
local_part)r   mrx   unquoted_namequoted_namere   partsrW   s           r:   r*   r*     s     
5z$$!:01A0B+NO
 	
 	$$U+AD,-HHJ){E+KKME..u5Q E#5##D; -- !IHVYZ[Z`Z`abZcVdKe
	s   >B9 9C7&C22C7)r=   None)r=   zre.Pattern[str])r   rt   r=   ztuple[str, str])DrB   
__future__r   _annotationsdataclasses_dataclassesr   	ipaddressr   r   r   r   r   r	   typingr
   r   pydantic_corer   r   r   r   typing_extensionsr   r   	_internalr   r   r   
_migrationr   annotated_handlersr   json_schemar   rU   r   rC   __all__	dataclassPydanticMetadatar   r   r   r   r   r$   r%   r&   r'   r(   r)   r+   r,   rX   rt   r   Representationr    r!   r"   r#   r   r   r   r*   r?   __getattr__rD   r<   r:   <module>r      s   K 2 " 	 f f % M M 2 @ @ ) 4 (VKV O. 
W-- 
 
@ 
$ sNFG;LMMN

 C4&RYIZ[[
\IT CAA
B 

"9v 

 C8IJJ
K GX#6[_crvwy \>9mB\kp#qqr S.'Q\koppq 	
   R
h c"H*4 *4ZO-$$ O-d@" @"F%" %"P'" '"T` /0  
&R  )r<   