o
    h,                     @  s  d dl mZ d dl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mZmZmZmZ dd	lmZ dd
lmZ esHeZerPddl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d.dd/d0d1dd2dd3dd4dd5dd6dd7dd8dd9d:d;dZdHd@dAZ e!ej"# Z$h dBZ%ddddd"dddd%d-dC
Z&dIdFdGZ'dS )J    )annotationsN)contextmanager)TYPE_CHECKINGAnyCallablecast)core_schema)LiteralSelf   )
ConfigDictExtraValuesJsonDictJsonEncoderJsonSchemaExtraCallable)PydanticUserError)PydanticDeprecatedSince20)GenerateSchemazGSupport for class-based `config` is deprecated, use ConfigDict instead.c                   @  st  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d/< d0ed1< ded2< d3ed4< ded5< d6ed7< ded8< d9d:dUd>d?ZedVdGdHZe	sdWdLdMZ
dXdPdQZdRdS ZdTS )Y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] | Nonealias_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']ser_json_bytesvalidate_defaultvalidate_returnztuple[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_causeTcheckconfig.ConfigDict | dict[str, Any] | type[Any] | Noner<   c                C  s"   |r	t || _d S tt|| _d S N)prepare_configr   r   r   )selfr=   r<    rB   P/var/www/html/ai/venv/lib/python3.10/site-packages/pydantic/_internal/_config.py__init__T   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}|r+|r+tddd|p0t|}	||	 t| D ]}
|
t	v rI|
|
||
< 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`.
        model_configNConfigz3"Config" and "model_config" cannot be used togetherzconfig-both)code)r   getattrupdatecopygetr   r@   listkeysconfig_keyspop)clsrE   rG   rI   
config_newbaser=   config_class_from_namespaceconfig_dict_from_namespaceconfig_from_namespacekrB   rB   rC   	for_modelZ   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)rA   r^   rB   rB   rC   __getattr__   s   zConfigWrapper.__getattr__objcore_schema.CoreConfigc              
   C  sx  ddd}t jdi |di d| jdp|o0|jd| jdd	| jd	d
| jd
d| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jd}|S d| jdd	| jd	d
| jd
d| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jd}|S d| jdd	| jd	d
| jd
d| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jdd| jd}|S )a  Create a pydantic-core config, `obj` is just used to populate `title` if not set in config.

        Pass `obj=None` if you do not want to attempt to infer the `title`.

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

        Args:
            obj: An object used to populate `title` if not set in config.

        Returns:
            A `CoreConfig` object created from config.
        rI   r   rJ   c                  [  s   dd |   D S )Nc                 S  s   i | ]\}}|d ur||qS r?   rB   .0r\   vrB   rB   rC   
<dictcomp>   s    zDConfigWrapper.core_config.<locals>.dict_not_none.<locals>.<dictcomp>)items)rI   rB   rB   rC   dict_not_none   s   z0ConfigWrapper.core_config.<locals>.dict_not_noner   extra_fields_behaviorr   r(   r    r   r   r   r+   r-   r.   r$   r%   r,   r/   r   r   r2   r8   r9   r:   N)rI   r   rJ   r   rB   )r   
CoreConfigr   rQ   __name__)rA   rd   rk   core_configrB   rB   rC   ro      s  
	
	
	
zConfigWrapper.core_configc                 C  s&   d dd | j D }d| dS )Nz, c                 s  s"    | ]\}}| d |V  qdS )=NrB   rf   rB   rB   rC   	<genexpr>   s     z)ConfigWrapper.__repr__.<locals>.<genexpr>zConfigWrapper())joinr   rj   )rA   crB   rB   rC   __repr__   s   zConfigWrapper.__repr__N)r=   r>   r<   r   )rE   rF   rG   rH   rI   rH   rJ   r
   )r^   r_   rJ   r   )rd   r   rJ   re   )rn   
__module____qualname____doc__	__slots____annotations__rD   classmethodr]   r   rc   ro   ru   rB   rB   rB   rC   r   !   s\   
 '

	+r   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 r?   _config_wrapper_stackrA   r}   rB   rB   rC   rD      s   zConfigWrapperStack.__init__rJ   c                 C  s
   | j d S )Nr~   )rA   rB   rB   rC   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 )NFr;   )
isinstancer   r   appendrU   r   rB   rB   rC   push   s   
zConfigWrapperStack.pushN)r}   r   )rJ   r   )r}   r   )	rn   rv   rw   rx   rD   propertyr   r   r   rB   rB   rB   rC   r|      s    
r|   r   r   Fr   r   r   r   r   r   r    r!   r"   r#   r$   r%   Tr&   r'   rB   r(   r)   r+   r,   neverr-   iso8601r.   utf8r/   r0   r1   )model_r2   r*   r3   r4   r5   r6   r7   r8   r9   z
rust-regexr:   r=   r>   rJ   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 )__)
startswithrN   rg   r\   r=   rB   rC   ri     s   " z"prepare_config.<locals>.<dictcomp>)
r   r   dictwarningswarnDEPRECATION_MESSAGEDeprecationWarningdirr   check_deprecated)r=   r   rB   r   rC   r@      s   	

r@   >
   fields
json_dumps
json_loadsgetter_dictsmart_unionallow_mutationpost_init_callerror_msg_templatescopy_on_model_validationunderscore_attrs_are_private)
allow_population_by_field_nameanystr_loweranystr_strip_whitespaceanystr_upperkeep_untouchedmax_anystr_lengthmin_anystr_lengthorm_modeschema_extra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 rB   )V2_RENAMED_KEYSr   rB   rB   rC   ri   :  s    z$check_deprecated.<locals>.<dictcomp>c                 S  s    g | ]\}}d |d|qS )* z has been renamed to rB   rf   rB   rB   rC   
<listcomp>;  s     z$check_deprecated.<locals>.<listcomp>c                 S  s   g | ]}d |dqS )r   z has been removedrB   r   rB   rB   rC   r   <  s    
z%Valid config keys have changed in V2:N)	V2_REMOVED_KEYSrS   r   sortedrj   rs   r   r   UserWarning)r   deprecated_removed_keysdeprecated_renamed_keys	renamingsrenamed_bulletsremoved_bulletsmessagerB   rB   rC   r   1  s   r   )r=   r>   rJ   r   )r   r   rJ   r   )(
__future__r   _annotationsr   
contextlibr   typingr   r   r   r   pydantic_corer   typing_extensionsr	   r
   r=   r   r   r   r   r   errorsr   r   r   #_internal._schema_generation_sharedr   r   r   r|   ra   r@   setrz   rS   rT   r   r   r   rB   rB   rB   rC   <module>   s     	
 !"#$
(