
    RPfh7                       d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ 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 d	dlmZ d	dlmZmZmZmZ er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& 	 	 d#	 	 	 	 	 	 	 d$dZ' G d de      Z(d%dZ) e	d      d&d       Z*d'dZ+dd	 	 	 	 	 	 	 	 	 	 	 d(dZ,d)dZ-ddd	 	 	 	 	 	 	 	 	 d*d Z.d+d!Z/d+d"Z0y),zmPrivate logic related to fields (the `Field()` function and `FieldInfo` class), and arguments to `Annotated`.    )annotationsN)copy)	lru_cache)TYPE_CHECKINGAny)PydanticUndefined)PydanticUserError   )_typing_extra)ConfigWrapper)extract_docstrings_from_cls)Representation)get_cls_type_hints_lenientget_type_hintsis_classvaris_finalvarBaseMetadata   	FieldInfo	BaseModel)StandardDataclass)DecoratorInfosc                    t        | dd      }d}|r	 t        j                  |   j                  }t        | |||      S # t        $ r Y w xY w)a  Gets type hints for an object by inferring the global namespace.

    It uses the `typing.get_type_hints`, The only thing that we do here is fetching
    global namespace from `obj.__module__` if it is not `None`.

    Args:
        obj: The object to get its type hints.
        localns: The local namespaces.
        include_extras: Whether to recursively include annotation metadata.

    Returns:
        The object type hints.
    
__module__N)globalnslocalnsinclude_extras)getattrsysmodules__dict__KeyErrorr   )objr   r    module_namer   s        T/var/www/fastapitest/venv/lib/python3.12/site-packages/pydantic/_internal/_fields.pyget_type_hints_infer_globalnsr)      s[    $ #|T2K&*H	{{;/88H #'R`aa  		s   ? 	A
Ac                      e Zd ZdZdZy)PydanticMetadataz0Base class for annotation markers like `Strict`. N)__name__r   __qualname____doc__	__slots__r,       r(   r+   r+   ;   s
    :Ir1   r+   c                 "     t               |       S )zCreate a new `_PydanticGeneralMetadata` class with the given metadata.

    Args:
        **metadata: The metadata to add.

    Returns:
        The new `_PydanticGeneralMetadata` class.
    )_general_metadata_cls)metadatas    r(   pydantic_general_metadatar5   A   s     # "8,,r1   )maxsizec                 2    ddl m}   G d dt        |       }|S )zCDo it this way to avoid importing `annotated_types` at import time.r   r   c                      e Zd ZdZddZy)7_general_metadata_cls.<locals>._PydanticGeneralMetadataz,Pydantic general metadata like `max_digits`.c                    || _         y N)r$   )selfr4   s     r(   __init__z@_general_metadata_cls.<locals>._PydanticGeneralMetadata.__init__U   s	    $DMr1   N)r4   r   )r-   r   r.   r/   r=   r,   r1   r(   _PydanticGeneralMetadatar9   R   s
    :	%r1   r>   )annotated_typesr   r+   )r   r>   s     r(   r3   r3   M   s     -%#3\ % $#r1   c                    |j                   r@t        |       }|j                         D ]!  \  }}|j                  ||v s||   |_        # y y r;   )use_attribute_docstringsr   itemsdescription)clsfieldsconfig_wrapperfields_docsann_name
field_infos         r(   _update_fields_from_docstringsrJ   [   sT    ..1#6$*LLN 	? Hj%%-(k2I)4X)>
&	? /r1   )typevars_mapc                  ddl m} t        | |      }| j                  j	                  di       }i }t               }	|j                         D ]d  \  }
dk(  r|j                  D ]  }j                  |      s|D ]N  }t        |      sddl
m} t        ||      r|j                  v r1t        d dt        |       d| d	       t!        fd
|j                  D              }t#        j$                  d d| d| dt&                t)        |
      r|	j+                         t-        |
t        | t.                    r|	j+                         t1              s| j2                  rdk7  rt        dd      t        | di       j	                  d      }|D ]  }t5        j6                  |      rt5        j                   |      ndD ch c]  }|j8                   }}t        |      sS||u rX|v r]|vrbt#        j$                  d d| j:                   d|j:                   dt&                	 t        | t.              }|t.        u rt<        	  |j>                  |
|      }	 tA        |        | j                  d   }|jJ                  v rtM        d      ||<   g |r'|jO                         D ]  }|jQ                  ||        tS        | ||       ||	fS c c}w # t<        $ r Y zw xY w# t<        $ rt |v r |jB                  |
      }nZi }| jD                  ddd   D ]  }|jG                  t        |di                |v rtI        |         }n |jB                  |
      }Y w xY w)a[  Collect the fields of a nascent pydantic model.

    Also collect the names of any ClassVars present in the type hints.

    The returned value is a tuple of two items: the fields dict, and the set of ClassVar names.

    Args:
        cls: BaseModel or dataclass.
        bases: Parents of the class, generally `cls.__bases__`.
        config_wrapper: The config wrapper instance.
        types_namespace: Optional extra namespace to look for types in.
        typevars_map: A dictionary mapping type variables to their concrete types.

    Returns:
        A tuple contains fields and class variables.

    Raises:
        NameError:
            - If there is a conflict between a field name and protected namespaces.
            - If there is a field other than `root` in `RootModel`.
            - If a field shadows an attribute in the parent model.
    r   r   __annotations__model_configr   zField "z" conflicts with member z of protected namespace "z".c              3  F   K   | ]  }j                  |      r|  y wr;   
startswith).0xrH   s     r(   	<genexpr>z'collect_model_fields.<locals>.<genexpr>   s$      -hNaNabcNd-s   !!z)" has conflict with protected namespace "z_".

You may be able to resolve this warning by setting `model_config['protected_namespaces'] = z`.rootzUnexpected field with name z4; only 'root' is allowed as a field of a `RootModel`__pydantic_generic_metadata__originr,   zField name "z" in "z"" shadows an attribute in parent ""Nmodel_fields__pydantic_decorators__z0you can't override a field with a computed field)*rE   r   r   r$   getsetrB   protected_namespacesrQ   hasattrmainr   
issubclassrZ   	NameErrorr!   tuplewarningswarnUserWarningr   add_is_finalvar_with_default_valr   is_valid_field_name__pydantic_root_model__dataclassesis_dataclassnamer.   AttributeErrorfrom_annotated_attributedelattrfrom_annotation	__bases__updater   computed_fields
ValueErrorvaluesapply_typevars_maprJ   )rD   basesrF   types_namespacerK   r   
type_hintsr   rE   
class_varsann_typeprotected_namespacebr   valid_namespacesgeneric_originbasefielddataclass_fieldsdefaultrI   model_fields_lookuprS   
decoratorsrH   s                           @r(   collect_model_fieldsr   c   s   < #+CAJ ,,""#4b9K#%F5J(..0 h&(~% #1#F#F 	""#67 Aq(+4 *1i 8X=W"+")(3KGTUW_L`Ka";<O;PPR!T#  (- -#1#F#F- ($ MM!(+TUhTi jDDTCUUWY $		* x NN8$(73J[3\]NN8$"8,&&8v+=-h\9mn  !&ErJNNxX 	DEPE]E]^bEc););D)Aik $

    tX&>)// ;."8*F33C3C2D E))*!-%	0	c8->?G++$$ ,* <;;HgNJX& &)\\2K%L
z111OPP%xQh&T ]]_ 	DE$$\?C	D #3?:I h " 3  	E;&6Y66x@
 =?#tt, OA'..wq."/MNO22 "&&9(&C!DJ
 ";!:!:8!DJ#	Es+   K.L8K33	K?>K?A:M?>M?c                    ddl m} t        |       sy|t        u ryt	        ||      r|j
                  t        u r|j                  yy)Nr   r   FT)rE   r   r   r   
isinstancer   default_factory)type_valr   s      r(   rh   rh      sC    "u	!	!	C	#8I)IcNaNaNir1   )rK   rF   c                   ddl m} i }| j                  }t        t	        |             }t
        j                  j                  | j                        }|i |j                  |xs i }|j                         D ]J  \  }	}
t        j                  |
j                  ||      }t        |      r4|
j                  s;|
j                   t"        j$                  k(  r|
j&                  t"        j$                  k(  r{t)        |
j                   |      r^|
j                   j*                  r*|
j                   j                  du rt-        d|	 dd       |j.                  ||
j                         }n |j.                  ||
      }|||	<   |j                   t0        ust)        t3        | |	|      |      s4t5        | |	|j                          M |r'|j7                         D ]  }|j9                  ||        |t;        | ||       |S )aF  Collect the fields of a dataclass.

    Args:
        cls: dataclass.
        types_namespace: Optional extra namespace to look for types in.
        typevars_map: A dictionary mapping type variables to their concrete types.
        config_wrapper: The config wrapper instance.

    Returns:
        The dataclass fields.
    r   r   FzDataclass field zD has init=False and init_var=True, but these are mutually exclusive.zclashing-init-and-init-var)code)rE   r   __dataclass_fields__dictvarsr"   r#   r\   r   r$   rB   r   eval_type_lenienttyper   initr   rk   MISSINGr   r   init_varr	   ro   r   r!   setattrrv   rw   rJ   )rD   ry   rK   rF   r   rE   r   cls_localnssource_modulerH   dataclass_fieldr|   rI   r   s                 r(   collect_dataclass_fieldsr     s   $ ##%F585M5MtCy/KKKOOCNN3M O]33O8M2O%5%;%;%=  7!/ 22?3G3GZefx   $$'';+>+>>//;3F3FF o--y9&&//"**//58+*8*4xy9  ;;;HoF]F]^J;;;HoVJ%x%66:gcS[]gFhjs;tC:#5#56A 7D ]]_ 	DE$$\?C	D !&sFNCMr1   c                &    | j                  d       S )N_rP   rm   s    r(   ri   ri   S  s    s###r1   c                L    | j                  d      xr | j                  d       S )Nr   __rP   r   s    r(   is_valid_privateattr_namer   W  s"    ??3=(=$==r1   )NF)r&   r   r   dict[str, Any] | Noner    boolreturnzdict[str, Any])r4   r   r   r   )r   ztype[BaseMetadata])rD   	type[Any]rE   dict[str, FieldInfo]rF   r   r   None)rD   ztype[BaseModel]rx   ztuple[type[Any], ...]rF   r   ry   r   rK   dict[Any, Any] | Noner   z%tuple[dict[str, FieldInfo], set[str]])r   r   r   r   r   r   )
rD   ztype[StandardDataclass]ry   r   rK   r   rF   zConfigWrapper | Noner   r   )rm   strr   r   )1r/   
__future__r   _annotationsrk   r"   rd   r   	functoolsr   typingr   r   pydantic_corer   pydantic.errorsr	    r   _configr   _docs_extractionr   _reprr   r   r   r   r   r?   r   rE   r   r`   r   _dataclassesr   _decoratorsr   r)   r+   r5   r3   rJ   r   rh   r   ri   r   r,   r1   r(   <module>r      sG   s 2  
    % + -  " 9 ! _ _," /+
 &* b	b"b b 	b:~ 	- 4
$ 
$? +/X	X X "X +	X (X +Xv
" +/+/E	 E*E (	E
 )E EP$>r1   