
    df?                    R   U d dl mZ d dlmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dl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mZ erddlmZ dhZddhZh dZddheZh eeddddZh eeZ h eeZ!h eeZ"h eeZ#h eeZ$h eeZ%h eeZ&h eeZ'eZ(h eeZ)h eeZ*h eeZ+dhZ,h dZ-dZ.dddddge.Z/d Z0 ee1      Z2d!e3d"<   eD ]  Z4e2e4   jk                  e.        e D ]  Z4e2e4   jk                  d#        e!D ]  Z4e2e4   jk                  d$        e"D ]  Z4e2e4   jk                  d%        e#D ]  Z4e2e4   jk                  d&        e$D ]  Z4e2e4   jk                  d'        e%D ]  Z4e2e4   jk                  d(        e&D ]  Z4e2e4   jk                  d)        e'D ]  Z4e2e4   jk                  d*        e)D ]  Z4e2e4   jk                  d+        e*D ]  Z4e2e4   jk                  d,        e+D ]  Z4e2e4   jk                  d-        g e.e/e0d.d/D ]  Z6e2d   jo                  e6        e,D ]  Z4e2e4   jk                  d0        e-D ]  Z4e2e4   jk                  d1        e(D ]  Z4e2e4   jk                  d2        d9d3Z8d:d4Z9d;d5Z:d<d6Z;d=d7Z<d>d8Z=y)?    )annotations)defaultdict)copy)partial)TYPE_CHECKINGAnyCallableIterableN)
CoreSchemaPydanticCustomErrorto_jsonable_python)core_schema   )_validators)PydanticGeneralMetadataPydanticMetadata   )GetJsonSchemaHandlerstrict
min_length
max_length>   gegtleltmultiple_ofallow_inf_nanstrip_whitespaceto_lowerto_upperpattern
union_mode>   r   default_hostdefault_pathdefault_porthost_requiredallowed_schemes)strbytesurlmulti-host-urllisttupleset	frozenset	generator)floatintdatetime	timedeltadatetimezdict[str, set[str]]CONSTRAINTS_TO_ALLOWED_SCHEMAS)r)   )r,   )r-   )r.   r/   )dict)r0   )r1   )r2   )r3   r4   r6   )r5   )r4   z
typed-dictmodel)union)r*   r+   )boolc                t    dfd}d| v r%| d   }d| v r|d   j                  |       y |g|d<   y d|gi| d<   y )Nc                D     ||       }|j                                 |S N)update)shandler	js_schemafs      e/home/api-vastappli/venv/lib/python3.12/site-packages/pydantic/_internal/_known_annotated_metadata.pyupdate_js_schemaz.add_js_update_schema.<locals>.update_js_schema[   s"    AJ	    metadatapydantic_js_functions)r@   cs.CoreSchemarA   r   returndict[str, Any])append)r@   rC   rE   rG   s    `  rD   add_js_update_schemarM   Z   sW    
 QZ="a',-445EF1A0BH,-03C2DE*rF   c           	     |    t        |       t        t        t        t        t
        t        d       fvrt        |       S | S r>   )typer2   r(   r1   r)   r;   r   )vs    rD   as_jsonable_valuerQ   j   s/    AwsCtT$Z@@!!$$HrF   c              #     K   ddl m} | D ]b  }t        |t        j                        r|E d{    (t        ||      r+|j
                  E d{    t        |      }g |_        | _| d y7 C7 $w)a  Expand the annotations.

    Args:
        annotations: An iterable of annotations.

    Returns:
        An iterable of expanded annotations.

    Example:
        ```py
        from annotated_types import Ge, Len

        from pydantic._internal._known_annotated_metadata import expand_grouped_metadata

        print(list(expand_grouped_metadata([Ge(4), Len(5)])))
        #> [Ge(ge=4), MinLen(min_length=5)]
        ```
    r   )	FieldInfoN)pydantic.fieldsrS   
isinstanceatGroupedMetadatarG   r   )r   rS   
annotations      rD   expand_grouped_metadatarY   p   ss     & *! 
j""4"45!!!
I.!**** j)J"$J!*s!   +A5A1 A5A3#A53A5c                   	
 |j                         }t         g      \  }}|d   }|j                         D ]r  \  }
|t        vrt	        d|       t        |   }||v r|dk(  r|dk(  r
|d<   n
||<   @|dk(  r*
du r&t        j                  t        j                  |      c S |dk(  r-t        j                  |t        j                  
	      g      c S |d
k(  rBt        j                  t        t        j                  
      |      }t        |
fd       |c S |dk(  r1t        j                  t        t        j                  
      |      c S |dk(  r1t        j                  t        t        j                  
      |      c S |dk(  r1t        j                  t        t        j                   
      |      c S |dk(  r1t        j                  t        t        j"                  
      |      c S |dk(  rBt        j                  t        t        j$                  
      |      }t        |
fd       |c S |dk(  rBt        j                  t        t        j&                  
      |      }t        |
fd       |c S |dk(  r-t        j                  |t        j                  d      g      c S |dk(  r-t        j                  |t        j                  d      g      c S |d k(  r-t        j                  |t        j                  d!      g      c S |dk(  r;t        j                  t        t        j$                   j(                        |      c S |dk(  r;t        j                  t        t        j&                   j*                        |      c S t-        d"| d#|        |D ]   t/         t0        j2                        r;t        j                  t        t        j                   j4                        |      c S t/         t0        j6                        r;t        j                  t        t        j                   j8                        |      c S t/         t0        j:                        r;t        j                  t        t        j                   j<                        |      c S t/         t0        j>                        r;t        j                  t        t        j                    j@                        |      c S t/         t0        jB                        r;t        j                  t        t        j"                   jD                        |      c S t/         t0        jF                        r;t        j                  t        t        j$                   j(                        |      c S t/         t0        jH                        r;t        j                  t        t        j&                   j*                        |      c S t/         t0        jJ                        rPtM         jN                  d$      r jN                  jP                   d%nd&	d) 	fd'}t        j                  ||      c S  y( |S )*a{  Apply `annotation` to `schema` if it is an annotation we know about (Gt, Le, etc.).
    Otherwise return `None`.

    This does not handle all known annotations. If / when it does, it can always
    return a CoreSchema and return the unmodified schema if the annotation should be ignored.

    Assumes that GroupedMetadata has already been expanded via `expand_grouped_metadata`.

    Args:
        annotation: The annotation.
        schema: The schema.

    Returns:
        An updated schema with annotation if it is an annotation we know about, `None` otherwise.

    Raises:
        PydanticCustomError: If `Predicate` fails.
    rO   zUnknown constraint r"   r:   moder   Fr!   )r!   r   )r   c                     dt               iS )Nr   rQ   values   rD   <lambda>z&apply_known_metadata.<locals>.<lambda>   s    T3DU3K,L rF   r   )r   r   )r   r   )r   r   )r   r   )r   c                     dt               iS )N	minLengthr]   r^   s   rD   r`   z&apply_known_metadata.<locals>.<lambda>       [;LU;S,U rF   r   )r   c                     dt               iS )N	maxLengthr]   r^   s   rD   r`   z&apply_known_metadata.<locals>.<lambda>   rc   rF   r   T)r   r   )r   r    )r    zUnable to apply constraint z to schema __qualname__  c                J    j                  |       st        dd d      | S )Npredicate_failedz
Predicate failed)funcr   )rP   rX   predicate_names    rD   val_funcz&apply_known_metadata.<locals>.val_func7  s3    !q)-*$^$4F;  rF   NrP   r   rJ   r   ))r   collect_known_metadataitemsr7   
ValueErrorcs no_info_after_validator_functionr   forbid_inf_nan_checkchain_schema
str_schemar   greater_than_validatorrM   greater_than_or_equal_validatorless_than_validatorless_than_or_equal_validatormultiple_of_validatormin_length_validatormax_length_validatorr   r   RuntimeErrorrU   rV   Gtr   Ger   Ltr   Ler   
MultipleOfr   MinLenMaxLen	Predicatehasattrrl   rf   )rX   schemaschema_updateother_metadataschema_type
constraintallowed_schemasr@   rn   rm   r_   s   `        @@rD   apply_known_metadatar      s   & [[]F$:J<$H!M>.K*002 bc
E;;2:,?@@8D/)\)kW.D!&v%*z"(Ue^6600  9$??MM%0  433::uEA !$LMH466CCN  46677EB  466@@UK  =(6699uM  <'3388UKA !$UVH<'3388UKA !$UVH--??MM48  :%??MM40  :%??MM40  <'6688ZEZEZ[  <'6688ZEZEZ[ 
 !<ZLT_S`abbEbcH % 2
j"%%(66::z}}M  
BEE*66CC
V  
BEE*6677JMMJ  
BEE*66@@Z]]S  
BMM26699zG]G]^  
BII.6688ZEZEZ[  
BII.6688ZEZEZ[  
BLL1CJ:??\jCk
 < <=Q?qsN 66xHHe2h MrF   c           
     j   t        |       } i }g }| D ]i  }t        |t              r|j                  |j                         0t        |t
              r|j                  |j                         \t        |t        j                        r|j                  d|j                  i       t        |t        j                        r|j                  d|j                  i       t        |t        j                        r|j                  d|j                  i       t        |t        j                        r|j                  d|j                  i       >t        |t        j                        r|j                  d|j                   i       wt        |t        j"                        r|j                  d|j$                  i       t        |t        j&                        r|j                  d|j(                  i       t        |t*              r`t-        |t
              rP|j                  t/        |      j1                         D ci c]  \  }}|j3                  d      r|| c}}       Y|j5                  |       l |j1                         D ci c]  \  }}|	|| }}}||fS c c}}w c c}}w )	a  Split `annotations` into known metadata and unknown annotations.

    Args:
        annotations: An iterable of annotations.

    Returns:
        A tuple contains a dict of known metadata and a list of unknown annotations.

    Example:
        ```py
        from annotated_types import Gt, Len

        from pydantic._internal._known_annotated_metadata import collect_known_metadata

        print(collect_known_metadata([Gt(1), Len(42), ...]))
        #> ({'gt': 1, 'min_length': 42}, [Ellipsis])
        ```
    r   r   r   r   r   r   r   _)rY   rU   r   r?   __dict__r   rV   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rO   
issubclassvarsrq   
startswithrL   )r   res	remainingrX   krP   s         rD   rp   rp   G  s   & *+6KCI! )
 j"9:JJz**+
$45JJz**+
BII.JJj&;&;<=
BII.JJj&;&;<=
BEE*JJjmm,-
BEE*JJjmm,-
BEE*JJjmm,-
BEE*JJjmm,-
BMM2JJz'='=>?
D)jEU.V JJj)9)?)?)A[AVYIZ1[\Z(9)@  IIK
9DAq1=1a4
9C
9	> \ :s   J)J)
J/J/c                    | j                         t        |      z
  }|r/t        d|ddj                  |D cg c]  }| c}             yc c}w )a  A small utility function to validate that the given metadata can be applied to the target.
    More than saving lines of code, this gives us a consistent error message for all of our internal implementations.

    Args:
        metadata: A dict of metadata.
        allowed: An iterable of allowed metadata.
        source_type: The source type.

    Raises:
        TypeError: If there is metadatas that can't be applied on source type.
    z/The following constraints cannot be applied to z: z, N)keysr.   	TypeErrorjoin)rG   allowedsource_typeunknownr   s        rD   check_metadatar     s^     mmoG,G=k_BtyylsYtgh]^\aZbYtOuNvw
 	
 Yts   
A)r@   rI   rC   zCallable[[], dict[str, Any]]rJ   Nonero   )r   Iterable[Any]rJ   r   )rX   r   r   r   rJ   zCoreSchema | None)r   r   rJ   z tuple[dict[str, Any], list[Any]])rG   rK   r   zIterable[str]r   r   rJ   r   )>
__future__r   collectionsr   r   	functoolsr   typingr   r   r	   r
   annotated_typesrV   pydantic_corer   r   r   r   rs   rh   r   _fieldsr   r   annotated_handlersr   STRICTSEQUENCE_CONSTRAINTS
INEQUALITYNUMERIC_CONSTRAINTSSTR_CONSTRAINTSBYTES_CONSTRAINTSLIST_CONSTRAINTSTUPLE_CONSTRAINTSSET_CONSTRAINTSDICT_CONSTRAINTSGENERATOR_CONSTRAINTSFLOAT_CONSTRAINTSINT_CONSTRAINTSBOOL_CONSTRAINTSDATE_TIME_CONSTRAINTSTIMEDELTA_CONSTRAINTSTIME_CONSTRAINTSUNION_CONSTRAINTSURL_CONSTRAINTSTEXT_SCHEMA_TYPESSEQUENCE_SCHEMA_TYPESNUMERIC_SCHEMA_TYPESr.   r7   __annotations__r   r?   r   addrM   rQ   rY   r   rp   r    rF   rD   <module>r      s   " #   9 9  M M +  >9 $l3 %
$oC
C i(i6i3EiziS]i_hi4*4V4 3)3F3 4*4V4 2(2623)3F3 8.88 3)3F3 1'1&1 7-77 7-77 2(262 !N  > %k^L]^ P 6A#6F  3 F! IJ":.556GHI# BJ":.55jAB" AJ":.55i@A# BJ":.55jAB! LJ":.556JKL" AJ":.55i@A' FJ":.55nEF# BJ":.55jAB! @J":.55h?@' TJ":.556RST' FJ":.55nEF" AJ":.55i@Am&m)>mAUmWcmelm >K"8,00=># BJ":.55jAB! QJ":.556OPQ" AJ":.55i@AF #Lnb8v
rF   