Skip to content

Commit

Permalink
Deprecate zope-interface support (#1120)
Browse files Browse the repository at this point in the history
  • Loading branch information
hynek committed Apr 10, 2023
1 parent d1aaeee commit c8b342d
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
5 changes: 5 additions & 0 deletions changelog.d/1120.deprecation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
The support for *zope-interface* via the `attrs.validators.provides` validator is now deprecated and will be removed in, or after, April 2024.

The presence of a C-based package in our developement dependencies has caused headaches and we're not under the impression it's used a lot.

Let us know if you're using it and we might publish it as a separate package.
10 changes: 10 additions & 0 deletions src/attr/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,17 @@ def provides(interface):
:raises TypeError: With a human readable error message, the attribute
(of type `attrs.Attribute`), the expected interface, and the
value it got.
.. deprecated:: 23.1.0
"""
import warnings

warnings.warn(
"attrs's zope-interface support is deprecated and will be removed in, "
"or after, April 2024.",
DeprecationWarning,
stacklevel=2,
)
return _ProvidesValidator(interface)


Expand Down
13 changes: 10 additions & 3 deletions tests/test_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,9 @@ class C:
def f(self):
pass

v = provides(ifoo)
with pytest.deprecated_call():
v = provides(ifoo)

v(None, simple_attr("x"), C())

def test_fail(self, ifoo):
Expand All @@ -359,9 +361,12 @@ def test_fail(self, ifoo):
value = object()
a = simple_attr("x")

v = provides(ifoo)
with pytest.deprecated_call():
v = provides(ifoo)

with pytest.raises(TypeError) as e:
v(None, a, value)

assert (
"'x' must provide {interface!r} which {value!r} doesn't.".format(
interface=ifoo, value=value
Expand All @@ -375,7 +380,9 @@ def test_repr(self, ifoo):
"""
Returned validator has a useful `__repr__`.
"""
v = provides(ifoo)
with pytest.deprecated_call():
v = provides(ifoo)

assert (
"<provides validator for interface {interface!r}>".format(
interface=ifoo
Expand Down

0 comments on commit c8b342d

Please sign in to comment.