o
    .ѹg1                     @  s4  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	sVeZe	rfd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(i 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d,d-d.d/d0d1d2d1d3d4d5dd6dd7d8d9dd:dd;dd<dd=dd>dd?dd@ddAdBdCddDddEd#Z'dRdJdKZ(e)ej*+ Z,h dLZ-ddddd'ddd!d*d5dM
Z.dSdPdQZ/dS )T    )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d^dHdIZed_dQdRZe	sd`dVdWZ
dadYdZZd[d\ Zd]S )bConfigWrapperzIInternal wrapper for Config which exposes ConfigDict items as attributes.)config_dictr   r   
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strictz0Literal['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config.ConfigDict | dict[str, Any] | type[Any] | NonerH   c                C  s"   |r	t || _d S tt|| _d S N)prepare_configr   r   r   )selfrI   rH    rN   ^/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/pydantic/_internal/_config.py__init__]   s   zConfigWrapper.__init__basestuple[type[Any], ...]	namespacedict[str, Any]kwargsreturnr   c                 C  s   t  }|D ]}t|dd}|r||  q|d}|d}|di }	|	dr6|du r6tddd|r@|r@tdd	d|pEt|}
||
 t| D ]}|t	v r^|
|||< qQ| |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   rL   listkeysconfig_keyspop)clsrQ   rS   rU   Z
config_newbaserI   Zconfig_class_from_namespaceZconfig_dict_from_namespaceZraw_annotationsZconfig_from_namespacekrN   rN   rO   	for_modelc   s.   


zConfigWrapper.for_modelnamestrr   c                 C  sJ   z| j | W S  ty$   zt| W  Y S  ty#   td|d w w )NzConfig has no attribute )r   KeyErrorconfig_defaultsAttributeError)rM   re   rN   rN   rO   __getattr__   s   zConfigWrapper.__getattr__core_schema.CoreConfigc              	   C  sP  | j }|ddurtjdtdd i d|dp|p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}tjd!i 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   Zextra_fields_behaviorr$   r0   r&   r    r   r   r3   r5   r6   r7   r8   r*   r+   r4   r9   r#   r"   r<   rB   rC   rD   rF   )r"   r<   rB   rC   rD   rF   c                 S  s   i | ]\}}|d ur||qS rK   rN   .0rc   vrN   rN   rO   
<dictcomp>   s    z-ConfigWrapper.core_config.<locals>.<dictcomp>rN   )r   r\   warningswarnr   r	   Z
CoreConfigitems)rM   r   rI   Zcore_config_valuesrN   rN   rO   core_config   sd   







	








zConfigWrapper.core_configc                 C  s&   d dd | j D }d| dS )Nz, c                 s  s"    | ]\}}| d |V  qdS )=NrN   rm   rN   rN   rO   	<genexpr>   s     z)ConfigWrapper.__repr__.<locals>.<genexpr>zConfigWrapper())joinr   rs   )rM   crN   rN   rO   __repr__   s   zConfigWrapper.__repr__N)rI   rJ   rH   r   )rQ   rR   rS   rT   rU   rT   rV   r   )re   rf   rV   r   )r   r   rV   rk   )__name__
__module____qualname____doc__	__slots__rW   rP   classmethodrd   r   rj   rt   rz   rN   rN   rN   rO   r   $   sh   
 .

	0r   c                   @  s6   e Zd ZdZdddZedddZedd
dZdS )ConfigWrapperStackz%A stack of `ConfigWrapper` instances.config_wrapperr   c                 C  s   |g| _ d S rK   _config_wrapper_stackrM   r   rN   rN   rO   rP      s   zConfigWrapperStack.__init__rV   c                 C  s
   | j d S )Nr   )rM   rN   rN   rO   tail   s   
zConfigWrapperStack.tail!ConfigWrapper | ConfigDict | Nonec                 c  sZ    |d u r
d V  d S t |tst|dd}| j| zd V  W | j  d S | j  w )NFrG   )
isinstancer   r   appendr`   r   rN   rN   rO   push   s   
zConfigWrapperStack.pushN)r   r   )rV   r   )r   r   )	r{   r|   r}   r~   rP   propertyr   r   r   rN   rN   rN   rO   r      s    
r   r   r   Fr   r    r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Tr,   r-   r.   r/   rN   r0   r1   r3   r4   neverr5   Ziso8601r6   utf8r7   r8   nullr9   r:   r;   )Zmodel_validateZ
model_dumpr<   r2   r=   r?   r>   r@   rA   rB   rC   z
rust-regexrD   rE   rF   rI   rJ   rV   r   c                   sP    du rt  S t tsttt  fddt D  tt  }t	| |S )zCreate 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 )__)
startswithrY   rn   rc   rI   rN   rO   rp   (  s   " z"prepare_config.<locals>.<dictcomp>)
r   r   dictrq   rr   DEPRECATION_MESSAGEDeprecationWarningdirr   check_deprecated)rI   r   rN   r   rO   rL     s   	

rL   >
   Zunderscore_attrs_are_privatefieldsZsmart_unionZcopy_on_model_validationZ
json_dumpsZ
json_loadsZallow_mutationZpost_init_callZgetter_dictZerror_msg_templates)
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_allr   Nonec                 C  s   t |  @ }t |  @ }|s|r?dd t|D }dd | D }dd t|D }ddg| | }t|t dS dS )	zjCheck for deprecated config keys and warn the user.

    Args:
        config_dict: The input config.
    c                 S  s   i | ]}|t | qS rN   )V2_RENAMED_KEYSr   rN   rN   rO   rp   U  s    z$check_deprecated.<locals>.<dictcomp>c                 S  s    g | ]\}}d |d|qS )* z has been renamed to rN   rm   rN   rN   rO   
<listcomp>V  s     z$check_deprecated.<locals>.<listcomp>c                 S  s   g | ]}d |dqS )r   z has been removedrN   r   rN   rN   rO   r   W  s    
z%Valid config keys have changed in V2:N)	V2_REMOVED_KEYSr^   r   sortedrs   rx   rq   rr   UserWarning)r   Zdeprecated_removed_keysZdeprecated_renamed_keysZ	renamingsZrenamed_bulletsZremoved_bulletsmessagerN   rN   rO   r   L  s   r   )rI   rJ   rV   r   )r   r   rV   r   )0
__future__r   Z_annotationsrq   
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   rh   rL   setrW   r^   r_   r   r   r   rN   rN   rN   rO   <module>   s     /	
 !"#$%&'()*
.