
    RPf!                       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 ddl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jV                  r2ddl,m-Z-  G d dej\                        Z/ G d de/ej\                        Z0neZ1	 	 d	 	 	 	 	 	 	 d dZ2dd	 	 	 	 	 	 	 	 	 d!dZ3d"dZ4y)#z0Private logic for creating pydantic dataclasses.    )annotationsN)partialwraps)AnyCallableClassVar)
ArgsKwargsSchemaSerializerSchemaValidatorcore_schema)	TypeGuard   )PydanticUndefinedAnnotation)	FieldInfo)create_schema_validator)PydanticDeprecatedSince20   )_config_decorators_typing_extra)collect_dataclass_fields)GenerateSchema)get_standard_typevars_map)set_dataclass_mocks)CallbackGetCoreSchemaHandler)generate_pydantic_signature)
ConfigDictc                  4    e Zd ZU ded<   ded<   ded<   d	dZy)
StandardDataclasszClassVar[dict[str, Any]]__dataclass_fields__zClassVar[Any]__dataclass_params__zClassVar[Callable[..., None]]__post_init__c                     y N )selfargskwargss      Y/var/www/fastapitest/venv/lib/python3.12/site-packages/pydantic/_internal/_dataclasses.py__init__zStandardDataclass.__init__&   s        N)r'   objectr(   r,   returnNone)__name__
__module____qualname____annotations__r*   r%   r+   r)   r   r   !   s    66++44	r+   r   c                  X    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<   y)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__zClassVar[SchemaValidator]__pydantic_validator__N)r/   r0   r1   __doc__r2   r%   r+   r)   r4   r4   )   s3    
	 21--"BB!EE;;!;; 99r+   r4   c                F    t        |       }t        | |||      }|| _        y)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_mapconfig_wrapperN)r   r   r9   )clstypes_namespacer?   r>   fieldss        r)   set_dataclass_fieldsrC   D   s'     -S1L%c?ftuF$Cr+   T)raise_errorsc          	        t        | d      rt        j                  dt               |t	        j
                  |       }t        | ||       t        |       }t        |||      }t        | j                  | j                  |d      }dd}| j                   d|_        || _
        |j                  | _        || _        t!        | d	d      }	 |r+ || t#        t%        |j&                  d
      |d            }	n|j'                  | d
      }	|j1                  |       }	 |j3                  |	      }	t7        j8                  d|       } |	| _        t=        |	| | j>                  | j                  d||j@                        x| _!        tE        |	|      | _#        |jH                  r5tK        | jL                        dfd       }|jO                  d|       | _&        y# t(        $ r2}
|r t+        | | j,                  d|
j.                   d       Y d}
~
y
d}
~
ww xY w# |j4                  $ r t+        | | j,                  d       Y y
w xY w)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)initrB   r?   is_dataclassc                Z    d}| }|j                   j                  t        ||      |       y )NT)self_instance)r;   validate_pythonr	   )__dataclass_self__r'   r(   __tracebackhide__ss        r)   r*   z$complete_dataclass.<locals>.__init__   s.     	  00D&1IYZ0[r+   z	.__init____get_pydantic_core_schema__F)from_dunder_get_core_schemaunpack)ref_mode`zall referenced typesztype[PydanticDataclass]	dataclassc               ,    j                  | ||       y r$   )validate_assignment)instancefieldvalue	validators      r)   validated_setattrz-complete_dataclass.<locals>.validated_setattr   s    ))(E5Ar+   )rL   r4   r'   r   r(   r   r-   r.   )rW   r   rX   strrY   r\   r-   r.   )(hasattrwarningswarnDeprecationWarningr   get_cls_types_namespacerC   r   r   r   r*   r9   r1   config_dictr5   __signature__getattrr   r   generate_schemar   r   r/   namecore_configclean_schemaCollectedInvalidtypingcastr7   r   r0   plugin_settingsr;   r
   r:   rV   r   __setattr____get__)r@   r?   rD   rA   r>   
gen_schemasigr*   get_core_schemaschemaerg   r[   rZ   s                @r)   complete_dataclassrt   V   sE   2 s./dfx	
 '??DonM,S1LJ &\\&&%	C\
  #//0	:HCL,88CCc#A4HO$,J66TYZ%F  //QV/WF !,,S1K((0 ++/
5C $*C -DS^^S%5%5{KQ_QoQo. C #36;"GC))	s		B 
 	B ,33D#>C ' C166(!}=	 && C/EFs+   A G H 	H(HH&H=<H=c           	         t        j                  |       xrG t        | d       xr8 t        | j                        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.
    r;   r2   )dataclassesrH   r]   setr    
issupersetrd   )_clss    r)   is_builtin_dataclassrz      sZ    > 	  & 	a677	a))*55c'$HY[]:^6_`r+   )NN)r@   ztype[StandardDataclass]rA   dict[str, Any] | Noner?   z_config.ConfigWrapper | Noner-   r.   )
r@   	type[Any]r?   z_config.ConfigWrapperrD   boolrA   r{   r-   r}   )ry   r|   r-   z"TypeGuard[type[StandardDataclass]])5r<   
__future__r   _annotationsrv   rj   r^   	functoolsr   r   r   r   r   pydantic_corer	   r
   r   r   typing_extensionsr   errorsr   rB   r   plugin._schema_validatorr   r    r   r   r   _fieldsr   _generate_schemar   	_genericsr   _mock_val_serr   _schema_generation_sharedr   
_signaturer   TYPE_CHECKINGconfigr   Protocolr   r4   r`   rC   rt   rz   r%   r+   r)   <module>r      s    6 2    $ * *  ( 0  > 0 1 1 - , 0 . C 3	#FOO :-v :0 3
 .237%	 %*% 1% 
	%, 	k	k)k 	k
 +k 
k\"r+   