Skip to content

Commit

Permalink
Use ATTRS_EQ_FIELD for attrs 19.2 compat
Browse files Browse the repository at this point in the history
  • Loading branch information
asottile committed Oct 6, 2019
1 parent a79acf2 commit c58b0fb
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 22 deletions.
18 changes: 4 additions & 14 deletions src/_pytest/assertion/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import _pytest._code
from _pytest import outcomes
from _pytest._io.saferepr import saferepr
from _pytest.compat import attrs_has_eq
from _pytest.compat import ATTRS_EQ_FIELD

# The _reprcompare attribute on the util module is used by the new assertion
# interpretation code and assertion rewriter to detect this plugin was
Expand Down Expand Up @@ -113,18 +113,6 @@ def isattrs(obj):
return getattr(obj, "__attrs_attrs__", None) is not None


if attrs_has_eq:

def attrsfieldhaseq(a):
return a.eq


else:

def attrsfieldhaseq(a):
return a.cmp


def isiterable(obj):
try:
iter(obj)
Expand Down Expand Up @@ -388,7 +376,9 @@ def _compare_eq_cls(left, right, verbose, type_fns):
fields_to_check = [field for field, info in all_fields.items() if info.compare]
elif isattrs(left):
all_fields = left.__attrs_attrs__
fields_to_check = [field.name for field in all_fields if attrsfieldhaseq(field)]
fields_to_check = [
field.name for field in all_fields if getattr(field, ATTRS_EQ_FIELD)
]

same = []
diff = []
Expand Down
7 changes: 3 additions & 4 deletions src/_pytest/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,8 +356,7 @@ def overload(f): # noqa: F811
return f


attrs_has_eq = getattr(attr, "__version_info__", (0, 0)) >= (19, 2)
if attrs_has_eq:
attrs_no_eq = {"eq": False}
if getattr(attr, "__version_info__", ()) >= (19, 2):
ATTRS_EQ_FIELD = "eq"
else:
attrs_no_eq = {"cmp": False}
ATTRS_EQ_FIELD = "cmp"
5 changes: 3 additions & 2 deletions src/_pytest/mark/structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import attr

from ..compat import ascii_escaped
from ..compat import attrs_no_eq
from ..compat import ATTRS_EQ_FIELD
from ..compat import getfslineno
from ..compat import NOTSET
from _pytest.outcomes import fail
Expand Down Expand Up @@ -368,7 +368,8 @@ def __repr__(self):
return "<NodeKeywords for node {}>".format(self.node)


@attr.s(hash=False, **attrs_no_eq) # type: ignore
# mypy cannot find this overload, remove when on attrs>=19.2
@attr.s(hash=False, **{ATTRS_EQ_FIELD: False}) # type: ignore
class NodeMarkers:
"""
internal structure for storing marks belonging to a node
Expand Down
4 changes: 2 additions & 2 deletions testing/test_assertion.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from _pytest import outcomes
from _pytest.assertion import truncate
from _pytest.assertion import util
from _pytest.compat import attrs_no_eq
from _pytest.compat import ATTRS_EQ_FIELD


def mock_config():
Expand Down Expand Up @@ -688,7 +688,7 @@ def test_attrs_with_attribute_comparison_off(self):
@attr.s
class SimpleDataObject:
field_a = attr.ib()
field_b = attr.ib(**attrs_no_eq)
field_b = attr.ib(**{ATTRS_EQ_FIELD: False})

left = SimpleDataObject(1, "b")
right = SimpleDataObject(1, "b")
Expand Down

0 comments on commit c58b0fb

Please sign in to comment.