U
    #i0                  ,   @  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 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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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)TYPE_CHECKINGAnyCallablecast)core_schema)LiteralSelf   )AliasGenerator)
ConfigDictExtraValuesJsonDictJsonEncoderJsonSchemaExtraCallable)PydanticUserError)PydanticDeprecatedSince20)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< d9ed:< ded;< d<ed=< ded>< d?ed@< dedA< dedB< dCedD< dEdFdGddHdIdJZedKdLdLdMdNdOdPZe	sdQdRdSdTdUZ
dRdVdWdXdYZdZd[ Zd\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] | 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, ...]protected_namespaceshide_input_in_errorsdefer_buildz.tuple[Literal[('model', 'type_adapter')], ...]experimental_defer_build_modez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)configrF   c                C  s    |rt || _ntt|| _d S N)prepare_configr   r   r   )selfrH   rF    rL   b/var/www/html/me.goteku.com/backend/venv/lib/python3.8/site-packages/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rh|shtddd|r||r|tdd	d|pt|}
||
 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   rJ   listkeysconfig_keyspop)clsrO   rP   rQ   Z
config_newbaserH   Zconfig_class_from_namespaceZconfig_dict_from_namespaceZraw_annotationsZconfig_from_namespacekrL   rL   rM   	for_modelc   s*    


zConfigWrapper.for_modelstrr   )namerR   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)rK   rb   rL   rL   rM   __getattr__   s    zConfigWrapper.__getattr__zcore_schema.CoreConfig)objrR   c                 C  s   | j }|dp|o|j|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, `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   r!   r-   r#   r   r   r   r0   r2   r3   r4   r5   r'   r(   r1   r6   r    r   r9   r@   rA   rB   rD   )r   Zextra_fields_behaviorr-   r#   r   r   r   r0   r2   r3   r4   r5   r'   r(   r1   r6   r    r   r9   r@   rA   rB   rD   c                 S  s   i | ]\}}|d k	r||qS rI   rL   .0r_   vrL   rL   rM   
<dictcomp>   s       z-ConfigWrapper.core_config.<locals>.<dictcomp>)r   rX   __name__r   Z
CoreConfigitems)rK   rg   rH   Zcore_config_valuesrL   rL   rM   core_config   s4    zConfigWrapper.core_configc                 C  s&   d dd | j D }d| dS )Nz, c                 s  s    | ]\}}| d |V  qdS )=NrL   rh   rL   rL   rM   	<genexpr>   s     z)ConfigWrapper.__repr__.<locals>.<genexpr>zConfigWrapper())joinr   rm   )rK   crL   rL   rM   __repr__   s    zConfigWrapper.__repr__N)rl   
__module____qualname____doc__	__slots__rS   rN   classmethodr`   r   rf   rn   rt   rL   rL   rL   rM   r   #   sh   
.	+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 rI   _config_wrapper_stackrK   r{   rL   rL   rM   rN      s    zConfigWrapperStack.__init__)rR   c                 C  s
   | j d S )Nr|   )rK   rL   rL   rM   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 )NFrE   )
isinstancer   r}   appendr\   r~   rL   rL   rM   push   s    

zConfigWrapperStack.pushN)	rl   ru   rv   rw   rN   propertyr   r   r   rL   rL   rL   rM   rz      s   rz   FTrL   neverZiso8601utf8null)Zmodel_)modelz
rust-regex)*r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r/   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rG   r   )rH   rR   c                   sP    dk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 )__)
startswithrU   ri   r_   rH   rL   rM   rk   $  s     
  z"prepare_config.<locals>.<dictcomp>)
r   r   dictwarningswarnDEPRECATION_MESSAGEDeprecationWarningdirr   check_deprecated)rH   r   rL   r   rM   rJ     s    	

rJ   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'   r.   r6   )
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   rR   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 rL   )V2_RENAMED_KEYSr   rL   rL   rM   rk   Q  s      z$check_deprecated.<locals>.<dictcomp>c                 S  s    g | ]\}}d |d|qS )* z has been renamed to rL   rh   rL   rL   rM   
<listcomp>R  s     z$check_deprecated.<locals>.<listcomp>c                 S  s   g | ]}d |dqS )r   z has been removedrL   r   rL   rL   rM   r   S  s     
z%Valid config keys have changed in V2:N)	V2_REMOVED_KEYSrZ   r   sortedrm   rr   r   r   UserWarning)r   Zdeprecated_removed_keysZdeprecated_renamed_keysZ	renamingsZrenamed_bulletsZremoved_bulletsmessagerL   rL   rM   r   H  s    r   )-
__future__r   Z_annotationsr   
contextlibr   typingr   r   r   r   Zpydantic_corer   typing_extensionsr	   r
   aliasesr   rH   r   r   r   r   r   errorsr   r   r   Z#_internal._schema_generation_sharedr   r   r   r   r   r   rz   rd   rJ   setrS   rZ   r[   r   r   r   rL   rL   rL   rM   <module>   s    +/