File: //usr/local/lib/python3.10/dist-packages/pydantic/v1/__pycache__/dataclasses.cpython-310.pyc
o
|��g�F � @ sT d Z ddlZddlZddlZddlmZ ddlmZ zddlmZ W n e y+ Y nw ddl
mZmZm
Z
mZmZmZmZmZmZmZmZ ddlmZ ddlmZ dd lmZmZmZmZ dd
lm Z ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' dd
l(m)Z)m*Z* ddl+m,Z, er�ddl(m-Z- ddl.m/Z/m0Z0 eddd�Z1eed df Z2G dd� d�Z3g d�Z4ed�Z5ej6dk�r;eej7e$fd�eddddddddddd�
de8de8d e8d!e8d"e8d#e8d$eeee9 df d%ee8 d&ee8 d'e8d(e
ee5 gd)f fd*d+���Z:eej7e$fd�eddddddddddd�
d,ee5 de8de8d e8d!e8d"e8d#e8d$eeee9 df d%ee8 d&ee8 d'e8d(d)fd-d+���Z:n}eej7e$fd�edddddddddd.� de8de8d e8d!e8d"e8d#e8d$eeee9 df d%ee8 d&ee8 d(e
ee5 gd)f fd/d+���Z:eej7e$fd�edddddddddd.� d,ee5 de8de8d e8d!e8d"e8d#e8d$eeee9 df d%ee8 d&ee8 d(d)fd0d+���Z:eej7e$fd� dTddddddddddd�
d,eee5 de8de8d e8d!e8d"e8d#e8d$eeee9 df d%ee8 d&ee8 d'e8d(ee
ee5 gd)f d)f fd1d+��Z:ed2ed d3e8d(eed ddf fd4d5��Z;G d6d� d�Z<d7ed d$ee d%e8d8e=d(df
d9d:�Z>dUd<d=�Z?d2ed d>ed(dfd?d@�Z@edfd7ed d$ee d8ee= d(edA fdBdC�ZAej6dDk�rqdEddFe=d(e8fdGdH�ZBndEddFe=d(e8fdIdH�ZBdVdKdL�ZCdJddMe=d3ed(dfdNdO�ZDd,ee d(e8fdPdQ�ZEd7ed d$ee d(d;fdRdS�ZFdS )WaX
The main purpose is to enhance stdlib dataclasses by adding validation
A pydantic dataclass can be generated from scratch or from a stdlib one.
Behind the scene, a pydantic dataclass is just like a regular one on which we attach
a `BaseModel` and magic methods to trigger the validation of the data.
`__init__` and `__post_init__` are hence overridden and have extra logic to be
able to validate input data.
When a pydantic dataclass is generated from scratch, it's just a plain dataclass
with validation triggered at initialization
The tricky part if for stdlib dataclasses that are converted after into pydantic ones e.g.
```py
@dataclasses.dataclass
class M:
x: int
ValidatedM = pydantic.dataclasses.dataclass(M)
```
We indeed still want to support equality, hashing, repr, ... as if it was the stdlib one!
```py
assert isinstance(ValidatedM(x=1), M)
assert ValidatedM(x=1) == M(x=1)
```
This means we **don't want to create a new dataclass that inherits from it**
The trick is to create a wrapper around `M` that will act as a proxy to trigger
validation without altering default `M` behaviour.
� N)�contextmanager)�wraps)�cached_property)�
TYPE_CHECKING�Any�Callable�ClassVar�Dict� Generator�Optional�Type�TypeVar�Union�overload)�dataclass_transform)�gather_all_validators)�
BaseConfig�
ConfigDict�Extra�
get_config)�ValidationError)�DataclassTypeError)�Field� FieldInfo�Required� Undefined)�create_model�validate_model)�ClassAttribute)� BaseModel)�CallableGenerator�NoArgAnyCallable�
DataclassT� Dataclass)�bound�DataclassProxyc @ s� e Zd ZU eeeef ed<