o
    ?HhF"                     @  sl  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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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l-m.Z. G dd dej/Z0G dd de0ej/Z1neZ2		d0d1d"d#Z3d$d%d2d*d+Z4d3d.d/Z5dS )4z0Private logic for creating pydantic dataclasses.    )annotationsN)partialwraps)AnyCallableClassVar)
ArgsKwargsSchemaSerializerSchemaValidatorcore_schema)	TypeGuard   )PydanticUndefinedAnnotation)PluggableSchemaValidatorcreate_schema_validator)PydanticDeprecatedSince20   )_config_decorators_typing_extra)collect_dataclass_fields)GenerateSchema)get_standard_typevars_map)set_dataclass_mocks)CallbackGetCoreSchemaHandler)generate_pydantic_signature)
ConfigDict)	FieldInfoc                   @  s0   e Zd ZU ded< ded< ded< dddZdS )StandardDataclasszClassVar[dict[str, Any]]__dataclass_fields__zClassVar[Any]__dataclass_params__zClassVar[Callable[..., None]]__post_init__argsobjectkwargsreturnNonec                 O  s   d S N )selfr"   r$   r(   r(   _/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/pydantic/_internal/_dataclasses.py__init__'   s   zStandardDataclass.__init__N)r"   r#   r$   r#   r%   r&   )__name__
__module____qualname____annotations__r+   r(   r(   r(   r*   r   "   s
   
 r   c                   @  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)r,   r-   r.   __doc__r/   r(   r(   r(   r*   r0   *   s   
 r0   clstype[StandardDataclass]types_namespacedict[str, Any] | Noneconfig_wrapper_config.ConfigWrapper | Noner%   r&   c                 C  s"   t | }t| |||d}|| _dS )zCollect and set `cls.__pydantic_fields__`.

    Args:
        cls: The class.
        types_namespace: The types namespace, defaults to `None`.
        config_wrapper: The config wrapper instance, defaults to `None`.
    )typevars_mapr=   N)r   r   r5   )r9   r;   r=   r?   fieldsr(   r(   r*   set_dataclass_fieldsE   s   
rA   T)raise_errors	type[Any]_config.ConfigWrapperrB   boolc             
     s  t | drtdt |du rt| }t| ||d t| }t|||}t	| j
| j|dd}d dd}| j d|_|| _
|j| _|| _t| dd}z|r^|| tt|jdd|dd}	n|j| dd}	W n" ty }
 z|rq t| | jd|
j d W Y d}
~
dS d}
~
ww || }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`.
        types_namespace: The types namespace.

    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.
    __post_init_post_parse__zVSupport for `__post_init_post_parse__` has been dropped, the method will not be calledN)r=   T)initr@   r=   is_dataclass__dataclass_self__r0   r"   r   r$   r%   r&   c                 _  s"   d}| }|j jt|||d d S )NT)self_instance)r7   validate_pythonr   )rI   r"   r$   __tracebackhide__sr(   r(   r*   r+      s   z$complete_dataclass.<locals>.__init__z	.__init____get_pydantic_core_schema__F)from_dunder_get_core_schemaunpack)ref_mode`zall referenced typesztype[PydanticDataclass]	dataclassinstancefieldstrvaluec                  s     | || d S r'   )validate_assignment)rT   rU   rW   	validatorr(   r*   validated_setattr   s   z-complete_dataclass.<locals>.validated_setattr)rI   r0   r"   r   r$   r   r%   r&   )rT   r   rU   rV   rW   rV   r%   r&   ))hasattrwarningswarnDeprecationWarningr   merge_cls_and_parent_nsrA   r   r   r   r+   r5   r.   config_dictr1   __signature__getattrr   r   generate_schemar   r   r,   namecore_configclean_schemaCollectedInvalidtypingcastr3   r   r-   plugin_settingsr7   r	   r6   rX   r   __setattr____get__r2   )r9   r=   rB   r;   r?   
gen_schemasigr+   get_core_schemaschemaerf   r[   r(   rY   r*   complete_dataclassW   s~   


	

rs   _cls"TypeGuard[type[StandardDataclass]]c                 C  s2   t | ot| d ot| jtt| di S )a>  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.
    ```py
    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.
    r7   r/   )dataclassesrH   r\   setr   
issupersetrc   )rt   r(   r(   r*   is_builtin_dataclass   s
   

ry   )NN)r9   r:   r;   r<   r=   r>   r%   r&   )
r9   rC   r=   rD   rB   rE   r;   r<   r%   rE   )rt   rC   r%   ru   )6r8   
__future__r   _annotationsrv   ri   r]   	functoolsr   r   r   r   r   pydantic_corer   r	   r
   r   typing_extensionsr   errorsr   plugin._schema_validatorr   r   r    r   r   r   _fieldsr   _generate_schemar   	_genericsr   _mock_val_serr   _schema_generation_sharedr   
_signaturer   TYPE_CHECKINGconfigr   r@   r   Protocolr   r0   r_   rA   rs   ry   r(   r(   r(   r*   <module>   s>    o