U
    	f@                     @  s  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mZmZmZ d dlmZ dd	lmZ erd
dlmZ dhZddhZddddhZddheZeeddddhZeeZeeZeeZeeZeeZeeZ eeZ!eeZ"eZ#eZ$eeZ%eeZ&eeZ'eZ(dhZ)ddddddhZ*dZ+dVe+Z,d%Z-ee.Z/d&e0d'< eD ]Z1e/e1 2e+ q\eD ]Z1e/e1 2d( qveD ]Z1e/e1 2d) qeD ]Z1e/e1 2d* qeD ]Z1e/e1 2d+ qeD ]Z1e/e1 2d, qe D ]Z1e/e1 2d- qe!D ]Z1e/e1 2d. qe"D ]Z1e/e1 2d/ q,e%D ]Z1e/e1 2d0 qFe&D ]Z1e/e1 2d1 q`e'D ]Z1e/e1 2d2 qze+e,e-dWD ]Z3e/d 4e3 qe)D ]Z1e/e1 2d5 qe*D ]Z1e/e1 2d6 qe#D ]Z1e/e1 2d7 qe$D ]Z1e/e1 2d8 qe(D ]Z1e/e1 2d9 qd:d;d<d=d>d?Z5d@d@dAdBdCZ6dDdDdEdFdGZ7d@dHdIdJdKdLZ8dDdMdEdNdOZ9dPdQd@d<dRdSdTZ:dUS )X    )annotations)defaultdict)copy)partial)TYPE_CHECKINGAnyCallableIterable)
CoreSchemaPydanticCustomErrorto_jsonable_python)core_schema   )PydanticMetadata   )GetJsonSchemaHandlerstrict
min_length
max_lengthlegeltgtmultiple_ofallow_inf_nanstrip_whitespaceto_lowerto_upperpattern
union_modeallowed_schemeshost_requireddefault_hostdefault_portdefault_path)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)r-   )r.   )r/   )r0   r1   r3   )r2   )r1   
typed-dictmodel)union)r'   r(   )bool)uuid)zlax-or-strictcs.CoreSchemazCallable[[], dict[str, Any]]None)sfreturnc                   s\   dddd fdd}d| krJ| d }d| kr>|d  | qX|g|d< nd|gi| d< d S )	Nr;   r   dict[str, Any])r=   handlerr?   c                   s   || }|    |S N)update)r=   rA   Z	js_schemar>    o/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/pydantic/_internal/_known_annotated_metadata.pyupdate_js_schema_   s    z.add_js_update_schema.<locals>.update_js_schemametadatapydantic_js_functions)append)r=   r>   rG   rH   rE   rD   rF   add_js_update_schema^   s    rK   r   vr?   c                 C  s(   t | tttttt d fkr$t| S | S rB   )typer/   r%   r.   r&   r9   r   rM   rE   rE   rF   as_jsonable_valuen   s    rP   zIterable[Any])r   r?   c                 c  sl   ddl }ddlm} | D ]N}t||jr4|E dH  qt||r`|jE dH  t|}g |_|V  q|V  qdS )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   N)	FieldInfo)annotated_typespydantic.fieldsrQ   
isinstanceZGroupedMetadatarH   r   )r   atrQ   
annotationrE   rE   rF   expand_grouped_metadatat   s    
rW   r
   zCoreSchema | None)rV   schemar?   c                   sl  ddl }ddlm} | }t g\}}|d }| D ]\}|tkrZtd| t| }||kr|dkr|dkr|d	< q:||< q:|d
krdkrt	|j
|  S |dkrt|tjdg  S |dkrt	t|jd|}	t|	fdd |	  S |dkr0t	t|jd|  S |dkrTt	t|jd|  S |dkrxt	t|jd|  S |dkrt	t|jd|  S |dkrt	t|jd|}	t|	fdd |	  S |dkrt	t|jd|}	t|	fdd |	  S |d kr4t|tjd!d"g  S |d#krXt|tjd!d$g  S |d%kr|t|tjd!d&g  S |dkrt	t|j jd|  S |dkrt	t|j jd|  S td'| d(| q:|D ] t |jrt	t|j jd|  S t |jr<t	t|j jd|  S t |jrft	t|j jd|  S t |j rt	t|j j!d|  S t |j"rt	t|j j#d|  S t |j$rt	t|j jd|  S t |j%rt	t|j jd|  S t |j&rbt' j(d)r8 j(j) d*nd+d,d,d- fd.d/}
t	|
|  S  dS |S )0a{  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.
    r   Nr   )_validatorsrN   zUnknown constraint r   r8   moder   Fr   )r   r   )r   c                     s   dt  iS )Nr   rP   rE   valuerE   rF   <lambda>       z&apply_known_metadata.<locals>.<lambda>r   )r   r   )r   r   )r   r   )r   r   )r   c                     s   dt  iS )N	minLengthr[   rE   r\   rE   rF   r^      r_   r   )r   c                     s   dt  iS )N	maxLengthr[   rE   r\   rE   rF   r^      r_   r   T)r   r   )r   r   )r   zUnable to apply constraint z to schema __qualname__  r   rL   c                   s      | stdd d| S )NZpredicate_failedz
Predicate Zfailed)funcr   rO   )rV   predicate_namerE   rF   val_funcA  s    

z&apply_known_metadata.<locals>.val_func)*rR   rd   rY   r   collect_known_metadataitemsr4   
ValueErrorcs no_info_after_validator_functionZforbid_inf_nan_checkchain_schema
str_schemar   Zgreater_than_validatorrK   Zgreater_than_or_equal_validatorZless_than_validatorZless_than_or_equal_validatorZmultiple_of_validatorZmin_length_validatorZmax_length_validatorr   r   RuntimeErrorrT   Gtr   Ger   Ltr   Ler   
MultipleOfr   MinLenMaxLenZ	Predicatehasattrre   rb   )rV   rX   rU   rY   Zschema_updateZother_metadataschema_type
constraintZallowed_schemasr=   rg   rE   )rV   rf   r]   rF   apply_known_metadata   s   

















 	rz   z tuple[dict[str, Any], list[Any]]c                 C  sj  ddl }t| } i }g }| D ]0}t|tr:||j qt||jrX|d|ji qt||jrv|d|j	i qt||j
r|d|ji qt||jr|d|ji qt||jr|d|ji qt||jr|d|ji qt||jr|d	|ji qt|trDt|trD|d
d t| D  q|| qdd | D }||fS )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   Nr   r   r   r   r   r   r   c                 S  s    i | ]\}}| d s||qS )_)
startswith.0krM   rE   rE   rF   
<dictcomp>  s     
  z*collect_known_metadata.<locals>.<dictcomp>c                 S  s   i | ]\}}|d k	r||qS rB   rE   r}   rE   rE   rF   r     s       )rR   rW   rT   r   rC   __dict__ru   r   rv   r   rp   r   rq   r   rr   r   rs   r   rt   r   rN   
issubclassvarsri   rJ   )r   rU   res	remainingrV   rE   rE   rF   rh   Q  s4    

rh   r@   zIterable[str])rH   allowedsource_typer?   c                 C  s<   |   t| }|r8td|dddd |D  dS )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, c                 S  s   g | ]
}|qS rE   rE   )r~   r   rE   rE   rF   
<listcomp>  s     z"check_metadata.<locals>.<listcomp>N)keysr+   	TypeErrorjoin)rH   r   r   unknownrE   rE   rF   check_metadata  s
    r   N)r)   r*   r+   r,   r-   )r6   r7   );
__future__r   collectionsr   r   	functoolsr   typingr   r   r   r	   pydantic_corer
   r   r   r   rk   _fieldsr   annotated_handlersr   ZSTRICTZSEQUENCE_CONSTRAINTSZ
INEQUALITYZNUMERIC_CONSTRAINTSZSTR_CONSTRAINTSZBYTES_CONSTRAINTSZLIST_CONSTRAINTSZTUPLE_CONSTRAINTSZSET_CONSTRAINTSZDICT_CONSTRAINTSZGENERATOR_CONSTRAINTSZFLOAT_CONSTRAINTSZINT_CONSTRAINTSZBOOL_CONSTRAINTSZUUID_CONSTRAINTSZDATE_TIME_CONSTRAINTSZTIMEDELTA_CONSTRAINTSZTIME_CONSTRAINTSZLAX_OR_STRICT_CONSTRAINTSZUNION_CONSTRAINTSZURL_CONSTRAINTSZTEXT_SCHEMA_TYPESZSEQUENCE_SCHEMA_TYPESZNUMERIC_SCHEMA_TYPESr+   r4   __annotations__ry   rC   rx   addrK   rP   rW   rz   rh   r   rE   rE   rE   rF   <module>   s    	( 69