From b9587d41dbfd613af10067b5027f006402987304 Mon Sep 17 00:00:00 2001 From: Hynek Schlawack Date: Thu, 1 Dec 2022 11:25:37 +0100 Subject: [PATCH] Add type hints / type examples --- src/attr/__init__.pyi | 4 ++++ tests/dataclass_transform_example.py | 6 ++++++ tests/typing_example.py | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/attr/__init__.pyi b/src/attr/__init__.pyi index 7aff65c3c..baa5b2a83 100644 --- a/src/attr/__init__.pyi +++ b/src/attr/__init__.pyi @@ -342,6 +342,7 @@ def attrs( on_setattr: Optional[_OnSetAttrArgType] = ..., field_transformer: Optional[_FieldTransformer] = ..., match_args: bool = ..., + unsafe_hash: Optional[bool] = ..., ) -> _C: ... @overload @__dataclass_transform__(order_default=True, field_descriptors=(attrib, field)) @@ -369,6 +370,7 @@ def attrs( on_setattr: Optional[_OnSetAttrArgType] = ..., field_transformer: Optional[_FieldTransformer] = ..., match_args: bool = ..., + unsafe_hash: Optional[bool] = ..., ) -> Callable[[_C], _C]: ... @overload @__dataclass_transform__(field_descriptors=(attrib, field)) @@ -377,6 +379,7 @@ def define( *, these: Optional[Dict[str, Any]] = ..., repr: bool = ..., + unsafe_hash: Optional[bool] = ..., hash: Optional[bool] = ..., init: bool = ..., slots: bool = ..., @@ -402,6 +405,7 @@ def define( *, these: Optional[Dict[str, Any]] = ..., repr: bool = ..., + unsafe_hash: Optional[bool] = ..., hash: Optional[bool] = ..., init: bool = ..., slots: bool = ..., diff --git a/tests/dataclass_transform_example.py b/tests/dataclass_transform_example.py index af09e8a5c..c65ea613b 100644 --- a/tests/dataclass_transform_example.py +++ b/tests/dataclass_transform_example.py @@ -55,3 +55,9 @@ class AliasedField: af = AliasedField(42) reveal_type(af.__init__) # noqa + + +# unsafe_hash is accepted +@attrs.define(unsafe_hash=True) +class Hashable: + pass diff --git a/tests/typing_example.py b/tests/typing_example.py index b4b617e0e..400808651 100644 --- a/tests/typing_example.py +++ b/tests/typing_example.py @@ -452,3 +452,8 @@ def accessing_from_attrs() -> None: foo = object if attrs.has(foo) or attr.has(foo): foo.__attrs_attrs__ + + +@attrs.define(unsafe_hash=True) +class Hashable: + pass