U
    nËj1  ã                +   @  sª  d dl mZ d dl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 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mZ e	s¬eZe	rÌddlm Z  ddl!m"Z"m#Z# dZ$G dd„ dƒZ%G dd„ dƒZ&eddddd ddddddddddddddddddddddddddddddddddddd�)Z'ddd œd!d"„Z(e)ej* +¡ ƒZ,d#d$d%d&d'd(d)d*d+d,h
Z-d-d.d/d0d1d2d3d4d5d6d7œ
Z.dd8d9œd:d;„Z/dS )<é    )ÚannotationsN)Úcontextmanager)ÚPattern)ÚTYPE_CHECKINGÚAnyÚCallableÚcast)Úcore_schema)ÚLiteralÚSelfé   )ÚAliasGenerator)Ú
ConfigDictÚExtraValuesÚJsonDictÚJsonEncoderÚJsonSchemaExtraCallable)ÚPydanticUserError)ÚPydanticDeprecatedSince20ÚPydanticDeprecatedSince210)ÚGenerateSchema)ÚComputedFieldInfoÚ	FieldInfozGSupport for class-based `config` is deprecated, use ConfigDict instead.c                   @  sÂ  e Zd ZU dZdZded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded < d!ed"< d#ed$< ded%< d&ed'< d(ed)< d*ed+< d*ed,< d-ed.< ded/< ded0< d1ed2< ded3< ded4< d5ed6< d7ed8< ded9< d:ed;< ded<< d=ed>< ded?< ded@< dAedB< dCdDœdEddFœdGdH„ZedIdJdJdKdLœdMdN„ƒZe	�s¦dOdPdQœdRdS„Z
ddTdUœdVdW„ZdXdY„ ZdZS )[ÚConfigWrapperzIInternal wrapper for Config which exposes ConfigDict items as attributes.)Úconfig_dictr   r   z
str | NoneÚtitleÚboolÚstr_to_lowerÚstr_to_upperÚstr_strip_whitespaceÚintÚstr_min_lengthz
int | NoneÚstr_max_lengthzExtraValues | NoneÚextraÚfrozenÚpopulate_by_nameÚuse_enum_valuesÚvalidate_assignmentÚarbitrary_types_allowedÚfrom_attributesÚloc_by_aliasz,Callable[[str], str] | AliasGenerator | NoneÚalias_generatorzCallable[[type], str] | NoneÚmodel_title_generatorz:Callable[[str, FieldInfo | ComputedFieldInfo], str] | NoneÚfield_title_generatorztuple[type, ...]Úignored_typesÚallow_inf_nanz)JsonDict | JsonSchemaExtraCallable | NoneÚjson_schema_extraz&dict[type[object], JsonEncoder] | NoneÚjson_encodersÚstrictz2Literal[('always', 'never', 'subclass-instances')]Úrevalidate_instanceszLiteral[('iso8601', 'float')]Úser_json_timedeltaz"Literal[('utf8', 'base64', 'hex')]Úser_json_bytesÚval_json_bytesz)Literal[('null', 'constants', 'strings')]Úser_json_inf_nanÚvalidate_defaultÚvalidate_returnztuple[str | Pattern[str], ...]Úprotected_namespacesÚhide_input_in_errorsÚdefer_buildzdict[str, object] | NoneÚplugin_settingsztype[GenerateSchema] | NoneÚschema_generatorÚ+json_schema_serialization_defaults_requiredz.Literal[('validation', 'serialization', None)]Újson_schema_mode_overrideÚcoerce_numbers_to_strz$Literal[('rust-regex', 'python-re')]Úregex_engineÚvalidation_error_causeÚuse_attribute_docstringsz'bool | Literal[('all', 'keys', 'none')]Úcache_stringsT©Úcheckú.ConfigDict | dict[str, Any] | type[Any] | None)ÚconfigrG   c                C  s    |rt |ƒ| _ntt|ƒ| _d S ©N)Úprepare_configr   r   r   )ÚselfrI   rG   © rM   ú>/tmp/pip-unpacked-wheel-zvl9l234/pydantic/_internal/_config.pyÚ__init__]   s    zConfigWrapper.__init__ztuple[type[Any], ...]zdict[str, Any]r   )ÚbasesÚ	namespaceÚkwargsÚreturnc                 C  sÆ   t ƒ }|D ]"}t|ddƒ}|r
| | ¡ ¡ q
| d¡}| d¡}| di ¡}	|	 d¡rl|dkrltddd�‚|r€|r€tdd	d�‚|pŠt|ƒ}
| |
¡ t| ¡ ƒD ]}|t	kr¢| 
|¡||< q¢| |ƒS )
a  Build a new `ConfigWrapper` instance for a `BaseModel`.

        The config wrapper built based on (in descending order of priority):
        - options from `kwargs`
        - options from the `namespace`
        - options from the base classes (`bases`)

        Args:
            bases: A tuple of base classes.
            namespace: The namespace of the class being created.
            kwargs: The kwargs passed to the class being created.

        Returns:
            A `ConfigWrapper` instance for `BaseModel`.
        Zmodel_configNZConfigÚ__annotations__z``model_config` cannot be used as a model field name. Use `model_config` for model configuration.zmodel-config-invalid-field-name)Úcodez3"Config" and "model_config" cannot be used togetherzconfig-both)r   ÚgetattrÚupdateÚcopyÚgetr   rK   ÚlistÚkeysÚconfig_keysÚpop)ÚclsrP   rQ   rR   Z
config_newÚbaserI   Zconfig_class_from_namespaceZconfig_dict_from_namespaceZraw_annotationsZconfig_from_namespaceÚkrM   rM   rN   Ú	for_modelc   s*    

þ
zConfigWrapper.for_modelÚstrr   )ÚnamerS   c                 C  sZ   z| j | W S  tk
rT   zt| W  Y S  tk
rN   td|›�ƒd ‚Y nX Y nX d S )NzConfig has no attribute )r   ÚKeyErrorÚconfig_defaultsÚAttributeError)rL   rc   rM   rM   rN   Ú__getattr__”   s    zConfigWrapper.__getattr__zcore_schema.CoreConfig)r   rS   c                 C  s  | j }| d¡dk	r$tjdtdd� | d¡p4|p4d| d¡| d¡| d	¡| d
¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡| d¡dœ}tjf dd„ | ¡ D ƒŽS ) a  Create a pydantic-core config.

        We don't use getattr here since we don't want to populate with defaults.

        Args:
            title: The title to use if not set in config.

        Returns:
            A `CoreConfig` object created from config.
        r>   NzfThe `schema_generator` setting has been deprecated since v2.10. This setting no longer has any effect.r   )Ú
stacklevelr   r#   r/   r%   r   r   r   r2   r4   r5   r6   r7   r)   r*   r3   r8   r"   r!   r;   rA   rB   rC   rE   )r   Zextra_fields_behaviorr/   r%   r   r   r   r2   r4   r5   r6   r7   r)   r*   r3   r8   r"   r!   r;   rA   rB   rC   rE   c                 S  s   i | ]\}}|d k	r||“qS rJ   rM   ©Ú.0r`   ÚvrM   rM   rN   Ú
<dictcomp>Ë   s       z-ConfigWrapper.core_config.<locals>.<dictcomp>)r   rY   ÚwarningsÚwarnr   r	   Z
CoreConfigÚitems)rL   r   rI   Zcore_config_valuesrM   rM   rN   Úcore_config�   s@    ýézConfigWrapper.core_configc                 C  s&   d  dd„ | j ¡ D ƒ¡}d|› d�S )Nz, c                 s  s    | ]\}}|› d |›�V  qdS )ú=NrM   ri   rM   rM   rN   Ú	<genexpr>Î   s     z)ConfigWrapper.__repr__.<locals>.<genexpr>zConfigWrapper(ú))Újoinr   ro   )rL   ÚcrM   rM   rN   Ú__repr__Í   s    zConfigWrapper.__repr__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rT   rO   Úclassmethodra   r   rg   rp   rv   rM   rM   rM   rN   r   $   sf   
.	0r   c                   @  sB   e Zd ZdZddœdd„Zeddœdd„ƒZed	dœd
d„ƒZdS )ÚConfigWrapperStackz%A stack of `ConfigWrapper` instances.r   )Úconfig_wrapperc                 C  s   |g| _ d S rJ   ©Ú_config_wrapper_stack©rL   r~   rM   rM   rN   rO   Õ   s    zConfigWrapperStack.__init__)rS   c                 C  s
   | j d S )Néÿÿÿÿr   )rL   rM   rM   rN   ÚtailØ   s    zConfigWrapperStack.tailz!ConfigWrapper | ConfigDict | Nonec                 c  sP   |d krd V  d S t |tƒs(t|dd�}| j |¡ z
d V  W 5 | j ¡  X d S )NFrF   )Ú
isinstancer   r€   Úappendr]   r�   rM   rM   rN   ÚpushÜ   s    

zConfigWrapperStack.pushN)	rw   rx   ry   rz   rO   Úpropertyrƒ   r   r†   rM   rM   rM   rN   r}   Ò   s   r}   FTrM   ÚneverZiso8601Úutf8Únull)Zmodel_validateZ
model_dumpz
rust-regex))r   r   r   r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r1   r<   r>   r=   r?   r@   rA   rB   rC   rD   rE   rH   r   )rI   rS   c                   sP   ˆ dkrt ƒ S tˆ tƒs:t tt¡ ‡ fdd„tˆ ƒD ƒ‰ tt ˆ ƒ}t	|ƒ |S )zÕCreate a `ConfigDict` instance from an existing dict, a class (e.g. old class-based config) or None.

    Args:
        config: The input config.

    Returns:
        A ConfigDict object created from config.
    Nc                   s"   i | ]}|  d ¡s|tˆ |ƒ“qS )Ú__)Ú
startswithrV   ©rj   r`   ©rI   rM   rN   rl   (  s     
  z"prepare_config.<locals>.<dictcomp>)
r   r„   Údictrm   rn   ÚDEPRECATION_MESSAGEÚDeprecationWarningÚdirr   Úcheck_deprecated)rI   r   rM   rŽ   rN   rK     s    	

rK   Zallow_mutationZerror_msg_templatesÚfieldsZgetter_dictZsmart_unionZunderscore_attrs_are_privateZ
json_loadsZ
json_dumpsZcopy_on_model_validationZpost_init_callr%   r   r   r   r.   r"   r!   r)   r0   r8   )
Zallow_population_by_field_nameZanystr_lowerZanystr_strip_whitespaceZanystr_upperZkeep_untouchedZmax_anystr_lengthZmin_anystr_lengthZorm_modeZschema_extraZvalidate_allÚNone)r   rS   c                 C  s~   t |  ¡ @ }t ¡ |  ¡ @ }|s$|rzdd„ t|ƒD ƒ}dd„ | ¡ D ƒ}dd„ t|ƒD ƒ}d dg| | ¡}t |t¡ dS )	zjCheck for deprecated config keys and warn the user.

    Args:
        config_dict: The input config.
    c                 S  s   i | ]}|t | “qS rM   )ÚV2_RENAMED_KEYSr�   rM   rM   rN   rl   U  s      z$check_deprecated.<locals>.<dictcomp>c                 S  s    g | ]\}}d |›d|›�‘qS )ú* z has been renamed to rM   ri   rM   rM   rN   Ú
<listcomp>V  s     z$check_deprecated.<locals>.<listcomp>c                 S  s   g | ]}d |›d�‘qS )r—   z has been removedrM   r�   rM   rM   rN   r˜   W  s     Ú
z%Valid config keys have changed in V2:N)	ÚV2_REMOVED_KEYSr[   r–   Úsortedro   rt   rm   rn   ÚUserWarning)r   Zdeprecated_removed_keysZdeprecated_renamed_keysZ	renamingsZrenamed_bulletsZremoved_bulletsÚmessagerM   rM   rN   r“   L  s    r“   )0Ú
__future__r   Z_annotationsrm   Ú
contextlibr   Úrer   Útypingr   r   r   r   Zpydantic_corer	   Ztyping_extensionsr
   r   Úaliasesr   rI   r   r   r   r   r   Úerrorsr   r   r   r‘   Z#_internal._schema_generation_sharedr   r”   r   r   r�   r   r}   re   rK   ÚsetrT   r[   r\   rš   r–   r“   rM   rM   rM   rN   Ú<module>   s®    /Ö.öö