o
    í6WjE{  ã                   @  sf  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	 ddl
mZmZ ddlmZ ddlmZmZmZ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# 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/m0Z0 ddl1m2Z2m3Z3 er´ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> G dd„ de0ƒZ?ej@dzi e,¤ŽG d d!„ d!ƒƒZAd{d&d'„ZBe	d|d)d*„ƒZCd}d3d4„ZDd~dd<d=„ZEd€dCdD„ZFd�dGdH„ZGd‚dKdL„ZHh dM£ZIh dN£ZJddOœdƒdVdW„ZKd„dZd[„ZLd…d]d^„ZMddd_œd†dcdd„ZNd‡dfdg„ZOdˆdidj„ZPdˆdkdl„ZQd‰dpdq„ZRdd5drœdŠdxdy„ZSdS )‹zmPrivate logic related to fields (the `Field()` function and `FieldInfo` class), and arguments to `Annotated`.é    )ÚannotationsN)ÚMapping)Úcache)Ú	ParameterÚismethoddescriptor)ÚPattern)ÚTYPE_CHECKINGÚAnyÚCallableÚTypeVarÚcast)ÚPydanticUndefined)ÚTypeIs)ÚAnnotationSource)ÚPydanticDeprecatedSince211)ÚPydanticUserErroré   )ÚAliasGeneratoré   )Ú	_genericsÚ_typing_extra)ÚConfigWrapper)Úextract_docstrings_from_cls)Úimport_cached_base_modelÚimport_cached_field_info)Ú
slots_true)Ú
NsResolver)ÚRepresentation)Úcan_be_positionalÚget_first_not_none©ÚBaseMetadata)Ú	FieldInfo)Ú	BaseModel)ÚPydanticDataclassÚStandardDataclass)ÚDecoratorInfosc                   @  s   e Zd ZdZdZdS )ÚPydanticMetadataz0Base class for annotation markers like `Strict`.© N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r(   r(   r(   úi/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/pydantic/_internal/_fields.pyr'   '   s    r'   c                   @  s   e Zd ZU ded< ded< dS )ÚPydanticExtraInfor	   Ú
annotationÚboolÚcompleteN)r)   r*   r+   Ú__annotations__r(   r(   r(   r.   r/   -   s   
 r/   Úmetadatar	   Úreturnr!   c                  K  s
   t ƒ | ƒS )z¿Create a new `_PydanticGeneralMetadata` class with the given metadata.

    Args:
        **metadata: The metadata to add.

    Returns:
        The new `_PydanticGeneralMetadata` class.
    )Ú_general_metadata_cls)r4   r(   r(   r.   Úpydantic_general_metadata4   s   
	r7   útype[BaseMetadata]c                  C  s"   ddl m}  G dd„ dt| ƒ}|S )zCDo it this way to avoid importing `annotated_types` at import time.r   r    c                   @  s   e Zd ZdZddd„ZdS )z7_general_metadata_cls.<locals>._PydanticGeneralMetadataz,Pydantic general metadata like `max_digits`.r4   r	   c                 S  s
   || _ d S ©N)Ú__dict__)Úselfr4   r(   r(   r.   Ú__init__H   s   
z@_general_metadata_cls.<locals>._PydanticGeneralMetadata.__init__N)r4   r	   )r)   r*   r+   r,   r<   r(   r(   r(   r.   Ú_PydanticGeneralMetadataE   s    r=   )Úannotated_typesr!   r'   )r!   r=   r(   r(   r.   r6   @   s   r6   Úprotected_namespacesútuple[str | Pattern[str], ...]Úann_nameÚstrÚbasesútuple[type[Any], ...]Úcls_nameÚNonec                 C  s<  t ƒ }| D ]–}d}t|tƒr| |¡d u}n
t|tƒr | |¡}|r›|D ]%}t||ƒrIt||ƒr8|t|di ƒv sIt	d|›dt||ƒ› d|›d�ƒ‚q$g }| D ]%}	t|	tƒre|	 |¡sd| 
d|	j›d�¡ qN| |	¡ss| 
d	|	› d	�¡ qNd
d |¡› t|ƒdkr‚dnd› �}
tjd|›d|›d|›d|
› d�	tdd� qd S )NFÚ__pydantic_fields__úField z conflicts with member z of protected namespace Ú.zre.compile(ú)ú'ú(z, r   z,)z in z$ conflicts with protected namespace zX.

You may be able to solve this by setting the 'protected_namespaces' configuration to é   ©Ú
stacklevel)r   Ú
isinstancer   ÚmatchrB   Ú
startswithÚhasattrÚ
issubclassÚgetattrÚ
ValueErrorÚappendÚpatternÚjoinÚlenÚwarningsÚwarnÚUserWarning)r?   rA   rC   rE   r#   Úprotected_namespaceÚns_violationÚbÚvalid_namespacesÚpnÚvalid_namespaces_strr(   r(   r.   Ú_check_protected_namespacesN   sH   



ÿÿ€

€
€$ÿü€ård   FÚclsú	type[Any]Úfieldsúdict[str, FieldInfo]Úuse_inspectr1   c                 C  s>   t | |d�}| ¡ D ]\}}|jd u r||v r|| |_q
d S )N©ri   )r   ÚitemsÚdescription)re   rg   ri   Úfields_docsrA   Ú
field_infor(   r(   r.   Ú_update_fields_from_docstringsy   s   
€þro   Útitle_generatorúCallable[[str, FieldInfo], str]Ú
field_namern   r"   c                 C  sB   |j d u r| ||ƒ}t|tƒstd| › d|j› �ƒ‚||_ d S d S )Nzfield_title_generator ú must return str, not )ÚtitlerP   rB   Ú	TypeErrorÚ	__class__)rp   rr   rn   rt   r(   r(   r.   Ú*_apply_field_title_generator_to_field_info€   s   



ûrw   Úalias_generatorú%Callable[[str], str] | AliasGeneratorc                 C  s  |j du s|j dks|jdu s|jdu s|jdu r…d\}}}t| tƒr,|  |¡\}}}nt| ƒrD| |ƒ}t|tƒsDt	d| › d|j
› �ƒ‚|j du sN|j dkrQd|_ |j dkret||ƒ|_t||ƒ|_||_|jdu rm||_|jdu rxt||ƒ|_|jdu r‡t||ƒ|_dS dS dS )av  Apply an alias generator to aliases on a `FieldInfo` instance if appropriate.

    Args:
        alias_generator: A callable that takes a string and returns a string, or an `AliasGenerator` instance.
        field_name: The name of the field from which to generate the alias.
        field_info: The `FieldInfo` instance to which the alias generator is (maybe) applied.
    Nr   )NNNzalias_generator rs   )Úalias_priorityÚaliasÚvalidation_aliasÚserialization_aliasrP   r   Úgenerate_aliasesÚcallablerB   ru   rv   r   )rx   rr   rn   r{   r|   r}   r(   r(   r.   Ú$_apply_alias_generator_to_field_info�   s4   











ãr€   Úconfig_wrapperr   c                 C  s@   |j p| j }|durt|||ƒ | jdurt| j||ƒ dS dS )ap  Update the `FieldInfo` instance from the configuration set on the model it belongs to.

    This will apply the title and alias generators from the configuration.

    Args:
        config_wrapper: The configuration from the model.
        field_name: The field name the `FieldInfo` instance is attached to.
        field_info: The `FieldInfo` instance to update.
    N)Úfield_title_generatorrw   rx   r€   )r�   rr   rn   r‚   r(   r(   r.   Úupdate_field_from_config¿   s   

ÿrƒ   >   ÚcopyÚdictÚjsonÚ_iterÚ_calculate_keysÚ_copy_and_set_values>
   ÚschemaÚfrom_ormÚvalidateÚ	constructÚ	parse_objÚ	parse_rawÚ
_get_valueÚ
parse_fileÚschema_jsonÚupdate_forward_refs)Útypevars_mapútype[BaseModel]Úns_resolverr   r”   úMapping[TypeVar, Any] | Noneú?tuple[dict[str, FieldInfo], PydanticExtraInfo | None, set[str]]c             
     sr  t ƒ }tƒ ‰ | j}i }t|ƒD ]}t|ddƒ }r| |¡ qtj| |d�}	t | ¡}
i }t	ƒ }|	 
¡ D �]b\}\}}|dkr@q4t|j||| jd� t |¡rU| |¡ q4t| |tƒ‰ˆtur~t‡ ‡fdd„tD ƒƒs|tˆdƒr~t‡ ‡fd	d„tD ƒƒr~t‰t|ƒsƒq4| jr’|d
kr’td|›d�ƒ‚|D ]D}t||ƒrØ||
vr q”t| di ƒ d¡}||u r®q”dd„ t |¡r»t |¡ndD ƒ}||v rÄq”tjd|› d| j› d|j› d�tdd� q”ˆtu �r||
v sæ||vr÷|j |t!j"d�}||_#|söd|_$n{||  %¡ }|�r	t&|||dd�}ni|}nft'ˆ|ƒ�r't(ˆj)ƒ�r'ˆj) *d| ¡}|ˆ_)|ˆj+d< |j,|ˆt!j"d�}ˆ|_-||_#|�s=d|_$n#d|j.v �r`| /¡ �s`tjd|›d|›d |›d!�t0dd"� | |¡ q4zt1| |ƒ W n
 t2�yq   Y nw | j3d# }||j4v �r‰t5d$|›d%| j›d&�ƒ‚|||< |j$�r—t6|||ƒ q4|j7�r¡t8| |ƒ d}d'|	v �r´|	d' \}}t9||d(�}|||fS ))a‰  Collect the fields and class variables names of a nascent Pydantic model.

    The fields collection process is *lenient*, meaning it won't error if string annotations
    fail to evaluate. If this happens, the original annotation (and assigned value, if any)
    is stored on the created `FieldInfo` instance.

    The `rebuild_model_fields()` should be called at a later point (e.g. when rebuilding the model),
    and will make use of these stored attributes.

    Args:
        cls: BaseModel or dataclass.
        config_wrapper: The config wrapper instance.
        ns_resolver: Namespace resolver to use when getting model annotations.
        typevars_map: A dictionary mapping type variables to their concrete types.

    Returns:
        A three-tuple containing the model fields, the `PydanticExtraInfo` instance if the `__pydantic_extra__` annotation is set,
        and class variables names.

    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.
    rG   N)r–   Úmodel_config)r?   rA   rC   rE   c                 3  s    � | ]}t ˆ |d ƒˆu V  qd S r9   )rU   ©Ú.0Ú	depr_name©Ú
BaseModel_Úassigned_valuer(   r.   Ú	<genexpr>&  s   € z'collect_model_fields.<locals>.<genexpr>Ú__func__c                 3  s*   � | ]}t t ˆ |d ƒdd ƒˆju V  qd S )Nr¡   )rU   r¡   rš   r�   r(   r.   r    *  s
   € ÿ
ÿÚrootzUnexpected field with name z4; only 'root' is allowed as a field of a `RootModel`Ú__pydantic_generic_metadata__Úoriginc                 S  s   h | ]}|j ’qS r(   ©Úname)r›   Úfieldr(   r(   r.   Ú	<setcomp>G  s    ÿz'collect_model_fields.<locals>.<setcomp>r(   zField name "z" in "z"" shadows an attribute in parent "ú"é   rN   ©Ú_sourceFT©r–   r”   ÚlenientÚdefaultÚfinalzAnnotation z= is marked as final and has a default value. Pydantic treats zz as a class variable, but it will be considered as a normal field in V3 to be aligned with dataclasses. If you still want zV to be considered as a class variable, annotate it as: `ClassVar[<type>] = <default>.`)ÚcategoryrO   Ú__pydantic_decorators__rH   z
 of class zf overrides symbol of same name in a parent class. This override with a computed_field is incompatible.Ú__pydantic_extra__©r0   r2   ):r   r   Ú	__bases__ÚreversedrU   Úupdater   Úget_model_type_hintsÚsafe_get_annotationsÚsetrk   rd   r?   r)   Úis_classvar_annotationÚaddr   ÚanyÚ_deprecated_method_namesrS   Ú_deprecated_classmethod_namesÚis_valid_field_nameÚ__pydantic_root_model__Ú	NameErrorÚgetÚdataclassesÚis_dataclassrg   r[   r\   r+   r]   Úfrom_annotationr   ÚCLASSÚ_original_annotationÚ	_completeÚ_copyÚ_recreate_field_inforP   r   r¯   Ú__get__Ú_attributes_setÚfrom_annotated_attributeÚ_original_assignmentÚ_qualifiersÚis_requiredr   ÚdelattrÚAttributeErrorr:   Úcomputed_fieldsru   rƒ   Úuse_attribute_docstringsro   r/   )re   r�   r–   r”   Ú
FieldInfo_rC   Úparent_fields_lookupÚbaseÚmodel_fieldsÚ
type_hintsÚcls_annotationsrg   Ú
class_varsrA   Úann_typeÚ	evaluatedÚgeneric_originÚdataclass_fieldsrn   Úparent_field_infor¯   Ú
decoratorsÚpydantic_extra_infoÚannr2   r(   r�   r.   Úcollect_model_fieldsà   sê    
€
ü

þûþú
ÿ
ÿÿü€
€ÿ
þú
ÿ
ÿ€

þ
rå   úMapping[TypeVar, Any]ú5tuple[dict[str, FieldInfo], PydanticExtraInfo | None]c          	      C  sÒ   i }|  | ¡�V | j ¡ D ]\}}|jr|||< qt|||dd�}t|||ƒ |||< q| jdurF| jjsFtt	j
| jjg|j¢R Ž dd�}n| j}W d  ƒ ||fS W d  ƒ ||fS 1 s`w   Y  ||fS )a^  Rebuild the (already present) model fields by trying to reevaluate annotations.

    This function should be called whenever a model with incomplete fields is encountered.

    Returns:
        A two-tuple, the first element being the rebuilt fields, the second element being
        the rebuild `PydanticExtraInfo` instance, if available.

    Raises:
        NameError: If one of the annotations failed to evaluate.

    Note:
        This function *doesn't* mutate the model fields in place, as it can be called during
        schema generation, where you don't want to mutate other model's fields.
    Fr­   NTr´   )ÚpushrG   rk   rÉ   rË   rƒ   Ú__pydantic_extra_info__r2   r/   r   Ú	eval_typer0   Útypes_namespace)	re   r�   r–   r”   Úrebuilt_fieldsÚf_namern   Ú	new_fieldÚrebuilt_extra_infor(   r(   r.   Úrebuild_model_fields´  s6   
ÿ
ÿÿü
í÷
ôërð   r®   c          
      C  sÔ   t ƒ }| j}|rt | j|¡}tj|g|j¢R Ž \}}ntj| jg|j¢R Ž }t ||¡}tj|g|j¢R Ž }d}| j	 }t
u rI|j|tjd�}	n|j||tjd�}	||	_	||	_|	jd ur`|	jn||	_|shd|	_|	S )NTr«   F)r   rl   r   Úreplace_typesrÈ   r   Útry_eval_typerë   rê   rÏ   r   rÆ   r   rÇ   rÎ   rÉ   )
rn   r–   r”   r®   rÖ   Úexisting_descrä   rÞ   Úassignrî   r(   r(   r.   rË   ã  s<   ÿþÿþÿþrË   )r–   r”   útype[StandardDataclass]úNsResolver | Noneúdict[Any, Any] | Nonec             	   C  sÆ  t ƒ }i }|p	tƒ }| j}t| jƒD ]²}t |¡sq| |¡�� | ¡ D ]�\}}	t	 
|¡}
||
vr2q$|j\}}t	 |	j||¡\}}t	 |¡rGq$|	jsW|	jtju rW|	jtju rWq$t|	j|ƒr�|	jjrr|	jjdu rqtd|› d�dd�‚q$|j||	jtjd�}|	j|_n|j||	tjd�}|	|_|s•d|_||_|||< t|||ƒ |jtur´tt| ||ƒ|ƒr´t| ||jƒ q$W d  ƒ n1 s¿w   Y  q|rÓ|  ¡ D ]}| !|¡ qË|j"rát#| |t$| dƒ d	� |S )
a|  Collect the fields of a dataclass.

    Args:
        cls: dataclass.
        config_wrapper: The config wrapper instance.
        ns_resolver: Namespace resolver to use when getting dataclass annotations.
            Defaults to an empty instance.
        typevars_map: A dictionary mapping type variables to their concrete types.

    Returns:
        The dataclass fields.
    FzDataclass field zD has init=False and init_var=True, but these are mutually exclusive.zclashing-init-and-init-var)Úcoder«   NÚ__is_pydantic_dataclass__rj   )%r   r   Ú__dataclass_fields__r¶   Ú__mro__rÄ   rÅ   rè   rk   r   r¹   rë   rò   Útyper»   Úinitr¯   ÚMISSINGÚdefault_factoryrP   Úinit_varr   rÎ   r   Ú	DATACLASSrÏ   rÉ   rÈ   rƒ   r   rU   ÚsetattrÚvaluesÚapply_typevars_maprÕ   ro   rS   )re   r�   r–   r”   rÖ   rg   rà   rØ   rA   Údataclass_fieldÚ	base_annsÚglobalnsÚlocalnsrÝ   rÞ   rn   r§   r(   r(   r.   Úcollect_dataclass_fields  sx   




ÿ
þ
ÿ
ÿÿ€Êÿ€9
ûr	  útype[PydanticDataclass]c                C  sÄ   t ƒ }i }| | ¡�N | j ¡ D ]?\}}|jr|||< q|j}tj|jg|j	¢R Ž }	t
 |	|¡}	|j|	|jtjd�}
|
jdurB|
jn||
_t|||
ƒ |
||< qW d  ƒ |S 1 s[w   Y  |S )aÆ  Rebuild the (already present) dataclass fields by trying to reevaluate annotations.

    This function should be called whenever a dataclass with incomplete fields is encountered.

    Raises:
        NameError: If one of the annotations failed to evaluate.

    Note:
        This function *doesn't* mutate the dataclass fields in place, as it can be called during
        schema generation, where you don't want to mutate other dataclass's fields.
    r«   N)r   rè   rG   rk   rÉ   rl   r   rê   rÈ   rë   r   rñ   rÎ   rÏ   r   r  rƒ   )re   r�   r–   r”   rÖ   rì   rí   rn   ró   rä   rî   r(   r(   r.   Úrebuild_dataclass_fields{  s4   
ÿþý
í
ÿêr  r¦   c                 C  s   |   d¡ S )NÚ_©rR   r¥   r(   r(   r.   rÀ   ©  s   rÀ   c                 C  s   |   d¡o
|   d¡ S )Nr  Ú__r  r¥   r(   r(   r.   Úis_valid_privateattr_name­  s   r  rÿ   ú3Callable[[], Any] | Callable[[dict[str, Any]], Any]ú'TypeIs[Callable[[dict[str, Any]], Any]]c              	   C  s^   zt  | ¡}W n ttfy   Y dS w t|j ¡ ƒ}t|ƒdko.t|d ƒo.|d j	t
ju S )zMWhether the provided default factory callable has a validated data parameter.Fr   r   )r   Úsignature_no_evalrV   ru   ÚlistÚ
parametersr  rZ   r   r¯   r   Úempty)rÿ   Úsigr  r(   r(   r.   Útakes_validated_data_argument±  s   ý(r  )Úvalidated_dataÚcall_default_factoryr¯   ú:Callable[[], Any] | Callable[[dict[str, Any]], Any] | Noner  údict[str, Any] | Noner  c                C  s`   ddl m} |du r|| ƒS |r.t|d�r&td|ƒ}|du r"tdƒ‚||ƒS td|ƒ}|ƒ S tS )zMResolve the default value using either a static default or a default_factory.r   )Úsmart_deepcopyN)rÿ   zCallable[[dict[str, Any]], Any]zpThe default factory requires the 'validated_data' argument, which was not provided when calling 'get_default()'.zCallable[[], Any])Ú_utilsr  r  r   rV   r   )r¯   rÿ   r  r  r  Úfacr(   r(   r.   Úresolve_default_valueÁ  s   

ÿ
r  r(   )r4   r	   r5   r!   )r5   r8   )
r?   r@   rA   rB   rC   rD   rE   rB   r5   rF   )F)re   rf   rg   rh   ri   r1   r5   rF   )rp   rq   rr   rB   rn   r"   )rx   ry   rr   rB   rn   r"   )r�   r   rr   rB   rn   r"   r5   rF   )
re   r•   r�   r   r–   r   r”   r—   r5   r˜   )
re   r•   r�   r   r–   r   r”   ræ   r5   rç   )
rn   r"   r–   r   r”   ræ   r®   r1   r5   r"   )
re   rõ   r�   r   r–   rö   r”   r÷   r5   rh   )
re   r
  r�   r   r–   r   r”   ræ   r5   rh   )r¦   rB   r5   r1   )rÿ   r  r5   r  )
r¯   r	   rÿ   r  r  r  r  r1   r5   r	   )Tr,   Ú
__future__r   Ú_annotationsrÄ   r[   Úcollections.abcr   Ú	functoolsr   Úinspectr   r   Úrer   Útypingr   r	   r
   r   r   Úpydantic_corer   Útyping_extensionsr   Útyping_inspection.introspectionr   Úpydanticr   Úpydantic.errorsr   Úaliasesr   Ú r   r   Ú_configr   Ú_docs_extractionr   Ú_import_utilsr   r   Ú_internal_dataclassr   Ú_namespace_utilsr   Ú_reprr   r  r   r   r>   r!   rg   r"   Úmainr#   Ú_dataclassesr$   r%   Ú_decoratorsr&   r'   Ú	dataclassr/   r7   r6   rd   ro   rw   r€   rƒ   r¾   r¿   rå   rð   rË   r	  r  rÀ   r  r  r  r(   r(   r(   r.   Ú<module>   sr    

+


2û 
U
/0û
l
.

û