Spaces:
Sleeping
Sleeping
| import enum | |
| import sys | |
| from typing import ( | |
| Any, | |
| Callable, | |
| Dict, | |
| Generic, | |
| List, | |
| Mapping, | |
| Optional, | |
| Protocol, | |
| Sequence, | |
| Tuple, | |
| Type, | |
| TypeVar, | |
| Union, | |
| overload, | |
| ) | |
| # `import X as X` is required to make these public | |
| from . import converters as converters | |
| from . import exceptions as exceptions | |
| from . import filters as filters | |
| from . import setters as setters | |
| from . import validators as validators | |
| from ._cmp import cmp_using as cmp_using | |
| from ._typing_compat import AttrsInstance_ | |
| from ._version_info import VersionInfo | |
| if sys.version_info >= (3, 10): | |
| from typing import TypeGuard | |
| else: | |
| from typing_extensions import TypeGuard | |
| if sys.version_info >= (3, 11): | |
| from typing import dataclass_transform | |
| else: | |
| from typing_extensions import dataclass_transform | |
| __version__: str | |
| __version_info__: VersionInfo | |
| __title__: str | |
| __description__: str | |
| __url__: str | |
| __uri__: str | |
| __author__: str | |
| __email__: str | |
| __license__: str | |
| __copyright__: str | |
| _T = TypeVar("_T") | |
| _C = TypeVar("_C", bound=type) | |
| _EqOrderType = Union[bool, Callable[[Any], Any]] | |
| _ValidatorType = Callable[[Any, "Attribute[_T]", _T], Any] | |
| _ConverterType = Callable[[Any], Any] | |
| _FilterType = Callable[["Attribute[_T]", _T], bool] | |
| _ReprType = Callable[[Any], str] | |
| _ReprArgType = Union[bool, _ReprType] | |
| _OnSetAttrType = Callable[[Any, "Attribute[Any]", Any], Any] | |
| _OnSetAttrArgType = Union[ | |
| _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 = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]] | |
| # We subclass this here to keep the protocol's qualified name clean. | |
| class AttrsInstance(AttrsInstance_, Protocol): | |
| pass | |
| _A = TypeVar("_A", bound=type[AttrsInstance]) | |
| class _Nothing(enum.Enum): | |
| NOTHING = enum.auto() | |
| NOTHING = _Nothing.NOTHING | |
| # NOTE: Factory lies about its return type to make this possible: | |
| # `x: List[int] # = Factory(list)` | |
| # Work around mypy issue #4554 in the common case by using an overload. | |
| if sys.version_info >= (3, 8): | |
| from typing import Literal | |
| def Factory(factory: Callable[[], _T]) -> _T: ... | |
| def Factory( | |
| factory: Callable[[Any], _T], | |
| takes_self: Literal[True], | |
| ) -> _T: ... | |
| def Factory( | |
| factory: Callable[[], _T], | |
| takes_self: Literal[False], | |
| ) -> _T: ... | |
| else: | |
| def Factory(factory: Callable[[], _T]) -> _T: ... | |
| def Factory( | |
| factory: Union[Callable[[Any], _T], Callable[[], _T]], | |
| takes_self: bool = ..., | |
| ) -> _T: ... | |
| class Attribute(Generic[_T]): | |
| name: str | |
| default: Optional[_T] | |
| validator: Optional[_ValidatorType[_T]] | |
| repr: _ReprArgType | |
| cmp: _EqOrderType | |
| eq: _EqOrderType | |
| order: _EqOrderType | |
| hash: Optional[bool] | |
| init: bool | |
| converter: Optional[_ConverterType] | |
| metadata: Dict[Any, Any] | |
| type: Optional[Type[_T]] | |
| kw_only: bool | |
| on_setattr: _OnSetAttrType | |
| alias: Optional[str] | |
| def evolve(self, **changes: Any) -> "Attribute[Any]": ... | |
| # NOTE: We had several choices for the annotation to use for type arg: | |
| # 1) Type[_T] | |
| # - Pros: Handles simple cases correctly | |
| # - Cons: Might produce less informative errors in the case of conflicting | |
| # TypeVars e.g. `attr.ib(default='bad', type=int)` | |
| # 2) Callable[..., _T] | |
| # - Pros: Better error messages than #1 for conflicting TypeVars | |
| # - Cons: Terrible error messages for validator checks. | |
| # e.g. attr.ib(type=int, validator=validate_str) | |
| # -> error: Cannot infer function type argument | |
| # 3) type (and do all of the work in the mypy plugin) | |
| # - Pros: Simple here, and we could customize the plugin with our own errors. | |
| # - Cons: Would need to write mypy plugin code to handle all the cases. | |
| # We chose option #1. | |
| # `attr` lies about its return type to make the following possible: | |
| # attr() -> Any | |
| # attr(8) -> int | |
| # attr(validator=<some callable>) -> Whatever the callable expects. | |
| # This makes this type of assignments possible: | |
| # x: int = attr(8) | |
| # | |
| # This form catches explicit None or no default but with no other arguments | |
| # returns Any. | |
| def attrib( | |
| default: None = ..., | |
| validator: None = ..., | |
| repr: _ReprArgType = ..., | |
| cmp: Optional[_EqOrderType] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| type: None = ..., | |
| converter: None = ..., | |
| factory: None = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| ) -> Any: ... | |
| # This form catches an explicit None or no default and infers the type from the | |
| # other arguments. | |
| def attrib( | |
| default: None = ..., | |
| validator: Optional[_ValidatorArgType[_T]] = ..., | |
| repr: _ReprArgType = ..., | |
| cmp: Optional[_EqOrderType] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| type: Optional[Type[_T]] = ..., | |
| converter: Optional[_ConverterType] = ..., | |
| factory: Optional[Callable[[], _T]] = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| ) -> _T: ... | |
| # This form catches an explicit default argument. | |
| def attrib( | |
| default: _T, | |
| validator: Optional[_ValidatorArgType[_T]] = ..., | |
| repr: _ReprArgType = ..., | |
| cmp: Optional[_EqOrderType] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| type: Optional[Type[_T]] = ..., | |
| converter: Optional[_ConverterType] = ..., | |
| factory: Optional[Callable[[], _T]] = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| ) -> _T: ... | |
| # This form covers type=non-Type: e.g. forward references (str), Any | |
| def attrib( | |
| default: Optional[_T] = ..., | |
| validator: Optional[_ValidatorArgType[_T]] = ..., | |
| repr: _ReprArgType = ..., | |
| cmp: Optional[_EqOrderType] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| type: object = ..., | |
| converter: Optional[_ConverterType] = ..., | |
| factory: Optional[Callable[[], _T]] = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| ) -> Any: ... | |
| def field( | |
| *, | |
| default: None = ..., | |
| validator: None = ..., | |
| repr: _ReprArgType = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| converter: None = ..., | |
| factory: None = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[bool] = ..., | |
| order: Optional[bool] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| type: Optional[type] = ..., | |
| ) -> Any: ... | |
| # This form catches an explicit None or no default and infers the type from the | |
| # other arguments. | |
| def field( | |
| *, | |
| default: None = ..., | |
| validator: Optional[_ValidatorArgType[_T]] = ..., | |
| repr: _ReprArgType = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| converter: Optional[_ConverterType] = ..., | |
| factory: Optional[Callable[[], _T]] = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| type: Optional[type] = ..., | |
| ) -> _T: ... | |
| # This form catches an explicit default argument. | |
| def field( | |
| *, | |
| default: _T, | |
| validator: Optional[_ValidatorArgType[_T]] = ..., | |
| repr: _ReprArgType = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| converter: Optional[_ConverterType] = ..., | |
| factory: Optional[Callable[[], _T]] = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| type: Optional[type] = ..., | |
| ) -> _T: ... | |
| # This form covers type=non-Type: e.g. forward references (str), Any | |
| def field( | |
| *, | |
| default: Optional[_T] = ..., | |
| validator: Optional[_ValidatorArgType[_T]] = ..., | |
| repr: _ReprArgType = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| metadata: Optional[Mapping[Any, Any]] = ..., | |
| converter: Optional[_ConverterType] = ..., | |
| factory: Optional[Callable[[], _T]] = ..., | |
| kw_only: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| alias: Optional[str] = ..., | |
| type: Optional[type] = ..., | |
| ) -> Any: ... | |
| def attrs( | |
| maybe_cls: _C, | |
| these: Optional[Dict[str, Any]] = ..., | |
| repr_ns: Optional[str] = ..., | |
| repr: bool = ..., | |
| cmp: Optional[_EqOrderType] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| slots: bool = ..., | |
| frozen: bool = ..., | |
| weakref_slot: bool = ..., | |
| str: bool = ..., | |
| auto_attribs: bool = ..., | |
| kw_only: bool = ..., | |
| cache_hash: bool = ..., | |
| auto_exc: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| auto_detect: bool = ..., | |
| collect_by_mro: bool = ..., | |
| getstate_setstate: Optional[bool] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| field_transformer: Optional[_FieldTransformer] = ..., | |
| match_args: bool = ..., | |
| unsafe_hash: Optional[bool] = ..., | |
| ) -> _C: ... | |
| def attrs( | |
| maybe_cls: None = ..., | |
| these: Optional[Dict[str, Any]] = ..., | |
| repr_ns: Optional[str] = ..., | |
| repr: bool = ..., | |
| cmp: Optional[_EqOrderType] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| slots: bool = ..., | |
| frozen: bool = ..., | |
| weakref_slot: bool = ..., | |
| str: bool = ..., | |
| auto_attribs: bool = ..., | |
| kw_only: bool = ..., | |
| cache_hash: bool = ..., | |
| auto_exc: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| auto_detect: bool = ..., | |
| collect_by_mro: bool = ..., | |
| getstate_setstate: Optional[bool] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| field_transformer: Optional[_FieldTransformer] = ..., | |
| match_args: bool = ..., | |
| unsafe_hash: Optional[bool] = ..., | |
| ) -> Callable[[_C], _C]: ... | |
| def define( | |
| maybe_cls: _C, | |
| *, | |
| these: Optional[Dict[str, Any]] = ..., | |
| repr: bool = ..., | |
| unsafe_hash: Optional[bool] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| slots: bool = ..., | |
| frozen: bool = ..., | |
| weakref_slot: bool = ..., | |
| str: bool = ..., | |
| auto_attribs: bool = ..., | |
| kw_only: bool = ..., | |
| cache_hash: bool = ..., | |
| auto_exc: bool = ..., | |
| eq: Optional[bool] = ..., | |
| order: Optional[bool] = ..., | |
| auto_detect: bool = ..., | |
| getstate_setstate: Optional[bool] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| field_transformer: Optional[_FieldTransformer] = ..., | |
| match_args: bool = ..., | |
| ) -> _C: ... | |
| def define( | |
| maybe_cls: None = ..., | |
| *, | |
| these: Optional[Dict[str, Any]] = ..., | |
| repr: bool = ..., | |
| unsafe_hash: Optional[bool] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| slots: bool = ..., | |
| frozen: bool = ..., | |
| weakref_slot: bool = ..., | |
| str: bool = ..., | |
| auto_attribs: bool = ..., | |
| kw_only: bool = ..., | |
| cache_hash: bool = ..., | |
| auto_exc: bool = ..., | |
| eq: Optional[bool] = ..., | |
| order: Optional[bool] = ..., | |
| auto_detect: bool = ..., | |
| getstate_setstate: Optional[bool] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| field_transformer: Optional[_FieldTransformer] = ..., | |
| match_args: bool = ..., | |
| ) -> Callable[[_C], _C]: ... | |
| mutable = define | |
| def frozen( | |
| maybe_cls: _C, | |
| *, | |
| these: Optional[Dict[str, Any]] = ..., | |
| repr: bool = ..., | |
| unsafe_hash: Optional[bool] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| slots: bool = ..., | |
| frozen: bool = ..., | |
| weakref_slot: bool = ..., | |
| str: bool = ..., | |
| auto_attribs: bool = ..., | |
| kw_only: bool = ..., | |
| cache_hash: bool = ..., | |
| auto_exc: bool = ..., | |
| eq: Optional[bool] = ..., | |
| order: Optional[bool] = ..., | |
| auto_detect: bool = ..., | |
| getstate_setstate: Optional[bool] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| field_transformer: Optional[_FieldTransformer] = ..., | |
| match_args: bool = ..., | |
| ) -> _C: ... | |
| def frozen( | |
| maybe_cls: None = ..., | |
| *, | |
| these: Optional[Dict[str, Any]] = ..., | |
| repr: bool = ..., | |
| unsafe_hash: Optional[bool] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| slots: bool = ..., | |
| frozen: bool = ..., | |
| weakref_slot: bool = ..., | |
| str: bool = ..., | |
| auto_attribs: bool = ..., | |
| kw_only: bool = ..., | |
| cache_hash: bool = ..., | |
| auto_exc: bool = ..., | |
| eq: Optional[bool] = ..., | |
| order: Optional[bool] = ..., | |
| auto_detect: bool = ..., | |
| getstate_setstate: Optional[bool] = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| field_transformer: Optional[_FieldTransformer] = ..., | |
| match_args: bool = ..., | |
| ) -> Callable[[_C], _C]: ... | |
| def fields(cls: Type[AttrsInstance]) -> Any: ... | |
| def fields_dict(cls: Type[AttrsInstance]) -> Dict[str, Attribute[Any]]: ... | |
| def validate(inst: AttrsInstance) -> None: ... | |
| def resolve_types( | |
| cls: _A, | |
| globalns: Optional[Dict[str, Any]] = ..., | |
| localns: Optional[Dict[str, Any]] = ..., | |
| attribs: Optional[List[Attribute[Any]]] = ..., | |
| include_extras: bool = ..., | |
| ) -> _A: ... | |
| # TODO: add support for returning a proper attrs class from the mypy plugin | |
| # we use Any instead of _CountingAttr so that e.g. `make_class('Foo', | |
| # [attr.ib()])` is valid | |
| def make_class( | |
| name: str, | |
| attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]], | |
| bases: Tuple[type, ...] = ..., | |
| class_body: Optional[Dict[str, Any]] = ..., | |
| repr_ns: Optional[str] = ..., | |
| repr: bool = ..., | |
| cmp: Optional[_EqOrderType] = ..., | |
| hash: Optional[bool] = ..., | |
| init: bool = ..., | |
| slots: bool = ..., | |
| frozen: bool = ..., | |
| weakref_slot: bool = ..., | |
| str: bool = ..., | |
| auto_attribs: bool = ..., | |
| kw_only: bool = ..., | |
| cache_hash: bool = ..., | |
| auto_exc: bool = ..., | |
| eq: Optional[_EqOrderType] = ..., | |
| order: Optional[_EqOrderType] = ..., | |
| collect_by_mro: bool = ..., | |
| on_setattr: Optional[_OnSetAttrArgType] = ..., | |
| field_transformer: Optional[_FieldTransformer] = ..., | |
| ) -> type: ... | |
| # _funcs -- | |
| # TODO: add support for returning TypedDict from the mypy plugin | |
| # FIXME: asdict/astuple do not honor their factory args. Waiting on one of | |
| # these: | |
| # https://github.com/python/mypy/issues/4236 | |
| # https://github.com/python/typing/issues/253 | |
| # XXX: remember to fix attrs.asdict/astuple too! | |
| def asdict( | |
| inst: AttrsInstance, | |
| recurse: bool = ..., | |
| filter: Optional[_FilterType[Any]] = ..., | |
| dict_factory: Type[Mapping[Any, Any]] = ..., | |
| retain_collection_types: bool = ..., | |
| value_serializer: Optional[ | |
| Callable[[type, Attribute[Any], Any], Any] | |
| ] = ..., | |
| tuple_keys: Optional[bool] = ..., | |
| ) -> Dict[str, Any]: ... | |
| # TODO: add support for returning NamedTuple from the mypy plugin | |
| def astuple( | |
| inst: AttrsInstance, | |
| recurse: bool = ..., | |
| filter: Optional[_FilterType[Any]] = ..., | |
| tuple_factory: Type[Sequence[Any]] = ..., | |
| retain_collection_types: bool = ..., | |
| ) -> Tuple[Any, ...]: ... | |
| def has(cls: type) -> TypeGuard[Type[AttrsInstance]]: ... | |
| def assoc(inst: _T, **changes: Any) -> _T: ... | |
| def evolve(inst: _T, **changes: Any) -> _T: ... | |
| # _config -- | |
| def set_run_validators(run: bool) -> None: ... | |
| def get_run_validators() -> bool: ... | |
| # aliases -- | |
| s = attributes = attrs | |
| ib = attr = attrib | |
| dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) | |