a
    y{Jh+-                  &   @  sd  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seZerddl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$ZdddddZ e!ej"# Z$h d Z%d!d"d#d$d%d&d'd(d)d*d+
Z&dd,d-d.d/Z'dS )0    )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                   @  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d/< d0ed1< d2ed3< ded4< d5ed6< ded7< d8ed9< ded:< d;d<d=dd>d?d@ZedAdBdBdCdDdEdFZe	s~dGdHdIdJdKZ
dHdLdMdNdOZdPdQ ZdRS )S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_byteszLiteral['null', 'constants']ser_json_inf_nan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.ConfigDict | dict[str, Any] | type[Any] | None)configr=   c                C  s    |rt || _ntt|| _d S N)prepare_configr   r   r   )selfr?   r=    rC   L/var/www/shaz/venv/lib/python3.9/site-packages/pydantic/_internal/_config.py__init__U   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}|rV|rVtddd|p`t|}	||	 t| D ]}
|
t	v rx|
|
||
< qx| |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Configz3"Config" and "model_config" cannot be used togetherzconfig-both)code)r   getattrupdatecopygetr   rA   listkeysconfig_keyspop)clsrF   rG   rH   Z
config_newbaser?   Zconfig_class_from_namespaceZconfig_dict_from_namespaceZconfig_from_namespacekrC   rC   rD   	for_model[   s    


zConfigWrapper.for_modelstrr   )namerI   c                 C  sV   z| j | W S  tyP   zt| W  Y S  tyJ   td|d Y n0 Y n0 d S )NzConfig has no attribute )r   KeyErrorconfig_defaultsAttributeError)rB   rX   rC   rC   rD   __getattr__   s    zConfigWrapper.__getattr__zcore_schema.CoreConfig)objrI   c                 C  s  ddddd}t jf i || jdp.|o.|j| jd| jd| jd| jd	| jd
| jd| jd| jd| jd| jd| jd| jd| jd| jd| jd| jd| jd| jd| jd| jd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.
        r   )rH   rI   c                  [  s   dd |   D S )Nc                 S  s   i | ]\}}|d ur||qS r@   rC   .0rU   vrC   rC   rD   
<dictcomp>       zDConfigWrapper.core_config.<locals>.dict_not_none.<locals>.<dictcomp>)items)rH   rC   rC   rD   dict_not_none   s    z0ConfigWrapper.core_config.<locals>.dict_not_noner   r   r(   r    r   r   r   r+   r-   r.   r/   r$   r%   r,   r0   r   r   r3   r9   r:   r;   )r   Zextra_fields_behaviorr(   r    r   r   r   r+   r-   r.   r/   r$   r%   r,   r0   r   r   r3   r9   r:   r;   )r   Z
CoreConfigr   rN   __name__)rB   r]   rd   core_configrC   rC   rD   rf      s6    



















zConfigWrapper.core_configc                 C  s&   d dd | j D }d| dS )Nz, c                 s  s    | ]\}}| d |V  qdS )=NrC   r^   rC   rC   rD   	<genexpr>   rb   z)ConfigWrapper.__repr__.<locals>.<genexpr>zConfigWrapper())joinr   rc   )rB   crC   rC   rD   __repr__   s    zConfigWrapper.__repr__N)re   
__module____qualname____doc__	__slots____annotations__rE   classmethodrV   r   r\   rf   rl   rC   rC   rC   rD   r   !   s\   
'	,r   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 r@   _config_wrapper_stackrB   rt   rC   rC   rD   rE      s    zConfigWrapperStack.__init__)rI   c                 C  s
   | j d S )Nru   )rB   rC   rC   rD   tail   s    zConfigWrapperStack.tailz!ConfigWrapper | ConfigDict | Nonec                 c  sZ   |d u rd V  d S t |ts(t|dd}| j| zd V  W | j  n| j  0 d S )NFr<   )
isinstancer   rv   appendrR   rw   rC   rC   rD   push   s    
zConfigWrapperStack.pushN)	re   rm   rn   ro   rE   propertyry   r   r|   rC   rC   rC   rD   rs      s   rs   FTrC   neverZiso8601utf8null)Zmodel_z
rust-regex)$r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r+   r,   r-   r.   r/   r0   r1   r2   r3   r*   r4   r5   r6   r7   r8   r9   r:   r;   r>   r   )r?   rI   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 )__)
startswithrK   r_   rU   r?   rC   rD   ra     rb   z"prepare_config.<locals>.<dictcomp>)
r   rz   dictwarningswarnDEPRECATION_MESSAGEDeprecationWarningdirr   check_deprecated)r?   r   rC   r   rD   rA     s    	

rA   >
   Z
json_loadsZpost_init_callZallow_mutationZerror_msg_templatesZcopy_on_model_validationZsmart_unionZgetter_dictZunderscore_attrs_are_privateZ
json_dumpsfieldsr    r   r   r   r'   r   r   r$   r)   r0   )
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   rI   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 rC   )V2_RENAMED_KEYSr   rC   rC   rD   ra   =  rb   z$check_deprecated.<locals>.<dictcomp>c                 S  s    g | ]\}}d |d|qS )* z has been renamed to rC   r^   rC   rC   rD   
<listcomp>>  rb   z$check_deprecated.<locals>.<listcomp>c                 S  s   g | ]}d |dqS )r   z has been removedrC   r   rC   rC   rD   r   ?  rb   
z%Valid config keys have changed in V2:N)	V2_REMOVED_KEYSrP   r   sortedrc   rj   r   r   UserWarning)r   Zdeprecated_removed_keysZdeprecated_renamed_keysZ	renamingsZrenamed_bulletsZremoved_bulletsmessagerC   rC   rD   r   4  s    r   )(
__future__r   Z_annotationsr   
contextlibr   typingr   r   r   r   Zpydantic_corer   typing_extensionsr	   r
   r?   r   r   r   r   r   errorsr   r   r   Z#_internal._schema_generation_sharedr   r   r   rs   rZ   rA   setrq   rP   rQ   r   r   r   rC   rC   rC   rD   <module>   s    )