a
    h#                     @  s  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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+r>ddl,m-Z. ddl/m0Z0 ddl1m2Z2 G dd de.ej3Z4neZ5d.ddddddd Z6d!dd"d#d$d%d&dd&d&d'd(d)Z7d$d*d+d,d-Z8dS )/z0Private 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InvalidSchemaError)get_standard_typevars_map)set_dataclass_mocks)
NsResolver)generate_pydantic_signature)LazyClassAttribute)DataclassInstance)
ConfigDict)	FieldInfoc                   @  s\   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< eddddZ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]Z__pydantic_decorators__zClassVar[dict[str, FieldInfo]]__pydantic_fields__zClassVar[SchemaSerializer]__pydantic_serializer__z4ClassVar[SchemaValidator | PluggableSchemaValidator]__pydantic_validator__bool)returnc                 C  s   d S N )clsr)   r)   [/var/www/html/assistant/venv/lib/python3.9/site-packages/pydantic/_internal/_dataclasses.py__pydantic_fields_complete__:   s    z.PydanticDataclass.__pydantic_fields_complete__N)__name__
__module____qualname____doc____annotations__classmethodr,   r)   r)   r)   r+   r   %   s   
r   ztype[StandardDataclass]zNsResolver | Nonez_config.ConfigWrapper | NoneNone)r*   ns_resolverconfig_wrapperr'   c                 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`.
    )r4   typevars_mapr5   N)r   r   r#   )r*   r4   r5   r6   fieldsr)   r)   r+   set_dataclass_fieldsC   s
    r8   TF)raise_errorsr4   _force_buildz	type[Any]z_config.ConfigWrapperr&   )r*   r5   r9   r4   r:   r'   c             
     s  | j }ddddddd}| j d|_|| _ |j| _t| ||d |sZ|jrZt|  d	S t| d
rpt	dt
 t| }t|||d}tdtt|| j|j|jdd| _z|| }	W nB t y }
 z(|r΂ t| d|
j d W Y d}
~
d	S d}
~
0 0 |j| jd}z||	}	W n ty4   t|  Y d	S 0 td| } |	| _t|	| | j| jd||j  | _! t"|	|| _#|j$rt%| j&dddd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.
    r   r   r3   )__dataclass_self__argskwargsr'   c                 _  s"   d}| }|j jt|||d d S )NT)Zself_instance)r%   Zvalidate_pythonr   )r;   r<   r=   Z__tracebackhide__sr)   r)   r+   __init__x   s    z$complete_dataclass.<locals>.__init__z	.__init__)r5   FZ__post_init_post_parse__zVSupport for `__post_init_post_parse__` has been dropped, the method will not be called)r4   r6   __signature__T)initr7   validate_by_nameextrais_dataclass`N)titleztype[PydanticDataclass]Z	dataclassstr)instancefieldvaluer'   c                  s     | || d S r(   )validate_assignment)rH   rI   rJ   Z	validatorr)   r+   validated_setattr   s    z-complete_dataclass.<locals>.validated_setattr))r?   r/   Zconfig_dictr    r8   Zdefer_buildr   hasattrwarningswarnDeprecationWarningr   r   r   r   r   r#   rB   rC   r@   Zgenerate_schemar   namecore_configr-   Zclean_schemar   typingcastr"   r   r.   Zplugin_settingsr%   r   r$   rK   r   __setattr____get__r!   )r*   r5   r9   r4   r:   Zoriginal_initr?   r6   Z
gen_schemaZschemaerS   rM   r)   rL   r+   complete_dataclassW   sn    

	
rY   z"TypeGuard[type[StandardDataclass]])_clsr'   c                 C  s2   t | o0t| d o0t| 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%   r1   )dataclassesrD   rN   setZ__dataclass_fields__
issupersetgetattr)rZ   r)   r)   r+   is_builtin_dataclass   s
    

r_   )NN)9r0   
__future__r   Z_annotationsr[   rT   rO   	functoolsr   r   r   r   Zpydantic_corer   r   r	   r
   Ztyping_extensionsr   errorsr   Zplugin._schema_validatorr   r   r    r   r   _fieldsr   Z_generate_schemar   r   Z	_genericsr   Z_mock_val_serr   Z_namespace_utilsr   
_signaturer   _utilsr   TYPE_CHECKINGZ	_typeshedr   ZStandardDataclassconfigr   r7   r   Protocolr   rQ   r8   rY   r_   r)   r)   r)   r+   <module>   sB     u