o
    g%                     @  sz  d Z ddlmZ ddlZddlZddlZddlmZm	Z	 ddlm
Z
mZ ddlmZmZmZmZ ddl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 ddlmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ej,rddl-m.Z/ ddl0m1Z1 ddl2m3Z3 G dd de/ej4Z5neZ6		d3d4d#d$Z7d%dd&d'd5d-d.Z8d6d1d2Z9dS )7z0Private logic for creating pydantic dataclasses.    )annotationsN)partialwraps)AnyClassVar)
ArgsKwargsSchemaSerializerSchemaValidatorcore_schema)	TypeGuard   )PydanticUndefinedAnnotation)PluggableSchemaValidatorcreate_schema_validator)PydanticDeprecatedSince20   )_config_decorators)collect_dataclass_fields)GenerateSchema)get_standard_typevars_map)set_dataclass_mocks)
NsResolver)CallbackGetCoreSchemaHandler)generate_pydantic_signature)LazyClassAttribute)DataclassInstance)
ConfigDict)	FieldInfoc                   @  sJ   e Zd ZU dZded< ded< ded< ded	< d
ed< ded< ded< dS )PydanticDataclassai  A protocol containing attributes only available once a class has been decorated as a Pydantic dataclass.

        Attributes:
            __pydantic_config__: Pydantic-specific configuration settings for the dataclass.
            __pydantic_complete__: Whether dataclass building is completed, or if there are still undefined fields.
            __pydantic_core_schema__: The pydantic-core schema used to build the SchemaValidator and SchemaSerializer.
            __pydantic_decorators__: Metadata containing the decorators defined on the dataclass.
            __pydantic_fields__: Metadata about the fields defined on the dataclass.
            __pydantic_serializer__: The pydantic-core SchemaSerializer used to dump instances of the dataclass.
            __pydantic_validator__: The pydantic-core SchemaValidator used to validate instances of the dataclass.
        zClassVar[ConfigDict]__pydantic_config__zClassVar[bool]__pydantic_complete__z ClassVar[core_schema.CoreSchema]__pydantic_core_schema__z$ClassVar[_decorators.DecoratorInfos]__pydantic_decorators__zClassVar[dict[str, FieldInfo]]__pydantic_fields__zClassVar[SchemaSerializer]__pydantic_serializer__z4ClassVar[SchemaValidator | PluggableSchemaValidator]__pydantic_validator__N)__name__
__module____qualname____doc____annotations__ r,   r,   V/var/www/visachat/venv/lib/python3.10/site-packages/pydantic/_internal/_dataclasses.pyr   &   s   
 r   clstype[StandardDataclass]ns_resolverNsResolver | Noneconfig_wrapper_config.ConfigWrapper | NonereturnNonec                 C  s"   t | }t| |||d}|| _dS )zCollect and set `cls.__pydantic_fields__`.

    Args:
        cls: The class.
        ns_resolver: Namespace resolver to use when getting dataclass annotations.
        config_wrapper: The config wrapper instance, defaults to `None`.
    )r0   typevars_mapr2   N)r   r   r$   )r.   r0   r2   r6   fieldsr,   r,   r-   set_dataclass_fieldsA   s
   
r8   TF)raise_errorsr0   _force_build	type[Any]_config.ConfigWrapperr9   boolr:   c             
     s  | j }d#dd	}| j d
|_|| _ |j| _t| ||d |s*|jr*t| | j dS t| dr5t	
dt t| }t|||d}tdtt|| j|j|jdd| _t| dd}	z|	rj|	| tt|jdd|dd}
n|j| dd}
W n" ty } z|r} t| | jd|j d W Y d}~dS d}~ww |j| jd}z||
}
W n |jy   t| | jd Y dS w td| } |
| _t |
| | j!| jd||j" | _# t$|
|| _%|j&rt'| j(d$ fd!d"}|)d| | _(d| _*dS )%a  Finish building a pydantic dataclass.

    This logic is called on a class which has already been wrapped in `dataclasses.dataclass()`.

    This is somewhat analogous to `pydantic._internal._model_construction.complete_model_class`.

    Args:
        cls: The class.
        config_wrapper: The config wrapper instance.
        raise_errors: Whether to raise errors, defaults to `True`.
        ns_resolver: The namespace resolver instance to use when collecting dataclass fields
            and during schema building.
        _force_build: Whether to force building the dataclass, no matter if
            [`defer_build`][pydantic.config.ConfigDict.defer_build] is set.

    Returns:
        `True` if building a pydantic dataclass is successfully completed, `False` otherwise.

    Raises:
        PydanticUndefinedAnnotation: If `raise_error` is `True` and there is an undefined annotations.
    __dataclass_self__r   argsr   kwargsr4   r5   c                 _  s"   d}| }|j jt|||d d S )NT)self_instance)r&   validate_pythonr   )r>   r?   r@   __tracebackhide__sr,   r,   r-   __init__v   s   z$complete_dataclass.<locals>.__init__z	.__init__)r2   F__post_init_post_parse__zVSupport for `__post_init_post_parse__` has been dropped, the method will not be called)r0   r6   __signature__T)initr7   populate_by_nameextrais_dataclass__get_pydantic_core_schema__N)from_dunder_get_core_schemaunpack)ref_mode`)titlezall referenced typesztype[PydanticDataclass]	dataclassinstancefieldstrvaluec                  s     | || d S )N)validate_assignment)rS   rT   rV   	validatorr,   r-   validated_setattr   s   z-complete_dataclass.<locals>.validated_setattr)r>   r   r?   r   r@   r   r4   r5   )rS   r   rT   rU   rV   rU   r4   r5   )+rE   r)   config_dictr    r8   defer_buildr   r'   hasattrwarningswarnDeprecationWarningr   r   r   r   r   r$   rI   rJ   rG   getattrr   generate_schemar   namecore_configclean_schemaCollectedInvalidtypingcastr"   r   r(   plugin_settingsr&   r   r%   rW   r   __setattr____get__r!   )r.   r2   r9   r0   r:   original_initrE   r6   
gen_schemaget_core_schemaschemaerd   rZ   r,   rX   r-   complete_dataclassU   s   


		
rq   _cls"TypeGuard[type[StandardDataclass]]c                 C  s2   t | ot| d ot| jtt| di S )aB  Returns True if a class is a stdlib dataclass and *not* a pydantic dataclass.

    We check that
    - `_cls` is a dataclass
    - `_cls` does not inherit from a processed pydantic dataclass (and thus have a `__pydantic_validator__`)
    - `_cls` does not have any annotations that are not dataclass fields
    e.g.
    ```python
    import dataclasses

    import pydantic.dataclasses

    @dataclasses.dataclass
    class A:
        x: int

    @pydantic.dataclasses.dataclass
    class B(A):
        y: int
    ```
    In this case, when we first check `B`, we make an extra check and look at the annotations ('y'),
    which won't be a superset of all the dataclass fields (only the stdlib fields i.e. 'x')

    Args:
        cls: The class.

    Returns:
        `True` if the class is a stdlib dataclass, `False` otherwise.
    r&   r+   )dataclassesrK   r]   set__dataclass_fields__
issupersetra   )rr   r,   r,   r-   is_builtin_dataclass   s
   

rx   )NN)r.   r/   r0   r1   r2   r3   r4   r5   )r.   r;   r2   r<   r9   r=   r0   r1   r:   r=   r4   r=   )rr   r;   r4   rs   ):r*   
__future__r   _annotationsrt   rg   r^   	functoolsr   r   r   r   pydantic_corer   r   r	   r
   typing_extensionsr   errorsr   plugin._schema_validatorr   r   r    r   r   _fieldsr   _generate_schemar   	_genericsr   _mock_val_serr   _namespace_utilsr   _schema_generation_sharedr   
_signaturer   _utilsr   TYPE_CHECKING	_typeshedr   StandardDataclassconfigr   r7   r   Protocolr   r`   r8   rq   rx   r,   r,   r,   r-   <module>   sF    