|
import sys |
|
|
|
from typing import ( |
|
Any, |
|
Callable, |
|
Mapping, |
|
Sequence, |
|
overload, |
|
TypeVar, |
|
) |
|
|
|
# Because we need to type our own stuff, we have to make everything from |
|
# attr explicitly public too. |
|
from attr import __author__ as __author__ |
|
from attr import __copyright__ as __copyright__ |
|
from attr import __description__ as __description__ |
|
from attr import __email__ as __email__ |
|
from attr import __license__ as __license__ |
|
from attr import __title__ as __title__ |
|
from attr import __url__ as __url__ |
|
from attr import __version__ as __version__ |
|
from attr import __version_info__ as __version_info__ |
|
from attr import assoc as assoc |
|
from attr import Attribute as Attribute |
|
from attr import AttrsInstance as AttrsInstance |
|
from attr import cmp_using as cmp_using |
|
from attr import converters as converters |
|
from attr import Converter as Converter |
|
from attr import evolve as evolve |
|
from attr import exceptions as exceptions |
|
from attr import Factory as Factory |
|
from attr import fields as fields |
|
from attr import fields_dict as fields_dict |
|
from attr import filters as filters |
|
from attr import has as has |
|
from attr import make_class as make_class |
|
from attr import NOTHING as NOTHING |
|
from attr import resolve_types as resolve_types |
|
from attr import setters as setters |
|
from attr import validate as validate |
|
from attr import validators as validators |
|
from attr import attrib, asdict as asdict, astuple as astuple |
|
|
|
if sys.version_info >= (3, 11): |
|
from typing import dataclass_transform |
|
else: |
|
from typing_extensions import dataclass_transform |
|
|
|
_T = TypeVar("_T") |
|
_C = TypeVar("_C", bound=type) |
|
|
|
_EqOrderType = bool | Callable[[Any], Any] |
|
_ValidatorType = Callable[[Any, "Attribute[_T]", _T], Any] |
|
_ConverterType = Callable[[Any], Any] |
|
_ReprType = Callable[[Any], str] |
|
_ReprArgType = bool | _ReprType |
|
_OnSetAttrType = Callable[[Any, "Attribute[Any]", Any], Any] |
|
_OnSetAttrArgType = _OnSetAttrType | list[_OnSetAttrType] | setters._NoOpType |
|
_FieldTransformer = Callable[ |
|
[type, list["Attribute[Any]"]], list["Attribute[Any]"] |
|
] |
|
# FIXME: in reality, if multiple validators are passed they must be in a list |
|
# or tuple, but those are invariant and so would prevent subtypes of |
|
# _ValidatorType from working when passed in a list or tuple. |
|
_ValidatorArgType = _ValidatorType[_T] | Sequence[_ValidatorType[_T]] |
|
|
|
@overload |
|
def field( |
|
*, |
|
default: None = ..., |
|
validator: None = ..., |
|
repr: _ReprArgType = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
metadata: Mapping[Any, Any] | None = ..., |
|
converter: None = ..., |
|
factory: None = ..., |
|
kw_only: bool = ..., |
|
eq: bool | None = ..., |
|
order: bool | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
alias: str | None = ..., |
|
type: type | None = ..., |
|
) -> Any: ... |
|
|
|
# This form catches an explicit None or no default and infers the type from the |
|
# other arguments. |
|
@overload |
|
def field( |
|
*, |
|
default: None = ..., |
|
validator: _ValidatorArgType[_T] | None = ..., |
|
repr: _ReprArgType = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
metadata: Mapping[Any, Any] | None = ..., |
|
converter: _ConverterType | Converter[Any, _T] | None = ..., |
|
factory: Callable[[], _T] | None = ..., |
|
kw_only: bool = ..., |
|
eq: _EqOrderType | None = ..., |
|
order: _EqOrderType | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
alias: str | None = ..., |
|
type: type | None = ..., |
|
) -> _T: ... |
|
|
|
# This form catches an explicit default argument. |
|
@overload |
|
def field( |
|
*, |
|
default: _T, |
|
validator: _ValidatorArgType[_T] | None = ..., |
|
repr: _ReprArgType = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
metadata: Mapping[Any, Any] | None = ..., |
|
converter: _ConverterType | Converter[Any, _T] | None = ..., |
|
factory: Callable[[], _T] | None = ..., |
|
kw_only: bool = ..., |
|
eq: _EqOrderType | None = ..., |
|
order: _EqOrderType | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
alias: str | None = ..., |
|
type: type | None = ..., |
|
) -> _T: ... |
|
|
|
# This form covers type=non-Type: e.g. forward references (str), Any |
|
@overload |
|
def field( |
|
*, |
|
default: _T | None = ..., |
|
validator: _ValidatorArgType[_T] | None = ..., |
|
repr: _ReprArgType = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
metadata: Mapping[Any, Any] | None = ..., |
|
converter: _ConverterType | Converter[Any, _T] | None = ..., |
|
factory: Callable[[], _T] | None = ..., |
|
kw_only: bool = ..., |
|
eq: _EqOrderType | None = ..., |
|
order: _EqOrderType | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
alias: str | None = ..., |
|
type: type | None = ..., |
|
) -> Any: ... |
|
@overload |
|
@dataclass_transform(field_specifiers=(attrib, field)) |
|
def define( |
|
maybe_cls: _C, |
|
*, |
|
these: dict[str, Any] | None = ..., |
|
repr: bool = ..., |
|
unsafe_hash: bool | None = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
slots: bool = ..., |
|
frozen: bool = ..., |
|
weakref_slot: bool = ..., |
|
str: bool = ..., |
|
auto_attribs: bool = ..., |
|
kw_only: bool = ..., |
|
cache_hash: bool = ..., |
|
auto_exc: bool = ..., |
|
eq: bool | None = ..., |
|
order: bool | None = ..., |
|
auto_detect: bool = ..., |
|
getstate_setstate: bool | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
field_transformer: _FieldTransformer | None = ..., |
|
match_args: bool = ..., |
|
) -> _C: ... |
|
@overload |
|
@dataclass_transform(field_specifiers=(attrib, field)) |
|
def define( |
|
maybe_cls: None = ..., |
|
*, |
|
these: dict[str, Any] | None = ..., |
|
repr: bool = ..., |
|
unsafe_hash: bool | None = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
slots: bool = ..., |
|
frozen: bool = ..., |
|
weakref_slot: bool = ..., |
|
str: bool = ..., |
|
auto_attribs: bool = ..., |
|
kw_only: bool = ..., |
|
cache_hash: bool = ..., |
|
auto_exc: bool = ..., |
|
eq: bool | None = ..., |
|
order: bool | None = ..., |
|
auto_detect: bool = ..., |
|
getstate_setstate: bool | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
field_transformer: _FieldTransformer | None = ..., |
|
match_args: bool = ..., |
|
) -> Callable[[_C], _C]: ... |
|
|
|
mutable = define |
|
|
|
@overload |
|
@dataclass_transform(frozen_default=True, field_specifiers=(attrib, field)) |
|
def frozen( |
|
maybe_cls: _C, |
|
*, |
|
these: dict[str, Any] | None = ..., |
|
repr: bool = ..., |
|
unsafe_hash: bool | None = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
slots: bool = ..., |
|
frozen: bool = ..., |
|
weakref_slot: bool = ..., |
|
str: bool = ..., |
|
auto_attribs: bool = ..., |
|
kw_only: bool = ..., |
|
cache_hash: bool = ..., |
|
auto_exc: bool = ..., |
|
eq: bool | None = ..., |
|
order: bool | None = ..., |
|
auto_detect: bool = ..., |
|
getstate_setstate: bool | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
field_transformer: _FieldTransformer | None = ..., |
|
match_args: bool = ..., |
|
) -> _C: ... |
|
@overload |
|
@dataclass_transform(frozen_default=True, field_specifiers=(attrib, field)) |
|
def frozen( |
|
maybe_cls: None = ..., |
|
*, |
|
these: dict[str, Any] | None = ..., |
|
repr: bool = ..., |
|
unsafe_hash: bool | None = ..., |
|
hash: bool | None = ..., |
|
init: bool = ..., |
|
slots: bool = ..., |
|
frozen: bool = ..., |
|
weakref_slot: bool = ..., |
|
str: bool = ..., |
|
auto_attribs: bool = ..., |
|
kw_only: bool = ..., |
|
cache_hash: bool = ..., |
|
auto_exc: bool = ..., |
|
eq: bool | None = ..., |
|
order: bool | None = ..., |
|
auto_detect: bool = ..., |
|
getstate_setstate: bool | None = ..., |
|
on_setattr: _OnSetAttrArgType | None = ..., |
|
field_transformer: _FieldTransformer | None = ..., |
|
match_args: bool = ..., |
|
) -> Callable[[_C], _C]: ... |
|
|