| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- 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
- from attr import NothingType as NothingType
- 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]
- _CallableConverterType = Callable[[Any], Any]
- _ConverterType = _CallableConverterType | Converter[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 | None = ...,
- 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
- | list[_ConverterType]
- | tuple[_ConverterType, ...]
- | None = ...,
- factory: Callable[[], _T] | None = ...,
- kw_only: bool | None = ...,
- 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
- | list[_ConverterType]
- | tuple[_ConverterType, ...]
- | None = ...,
- factory: Callable[[], _T] | None = ...,
- kw_only: bool | None = ...,
- 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
- | list[_ConverterType]
- | tuple[_ConverterType, ...]
- | None = ...,
- factory: Callable[[], _T] | None = ...,
- kw_only: bool | None = ...,
- 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]: ...
- class ClassProps:
- # XXX: somehow when defining/using enums Mypy starts looking at our own
- # (untyped) code and causes tons of errors.
- Hashability: Any
- KeywordOnly: Any
- is_exception: bool
- is_slotted: bool
- has_weakref_slot: bool
- is_frozen: bool
- # kw_only: ClassProps.KeywordOnly
- kw_only: Any
- collected_fields_by_mro: bool
- added_init: bool
- added_repr: bool
- added_eq: bool
- added_ordering: bool
- # hashability: ClassProps.Hashability
- hashability: Any
- added_match_args: bool
- added_str: bool
- added_pickling: bool
- on_setattr_hook: _OnSetAttrType | None
- field_transformer: Callable[[Attribute[Any]], Attribute[Any]] | None
- def __init__(
- self,
- is_exception: bool,
- is_slotted: bool,
- has_weakref_slot: bool,
- is_frozen: bool,
- # kw_only: ClassProps.KeywordOnly
- kw_only: Any,
- collected_fields_by_mro: bool,
- added_init: bool,
- added_repr: bool,
- added_eq: bool,
- added_ordering: bool,
- # hashability: ClassProps.Hashability
- hashability: Any,
- added_match_args: bool,
- added_str: bool,
- added_pickling: bool,
- on_setattr_hook: _OnSetAttrType,
- field_transformer: Callable[[Attribute[Any]], Attribute[Any]],
- ) -> None: ...
- @property
- def is_hashable(self) -> bool: ...
- def inspect(cls: type) -> ClassProps: ...
|