Skip to content

Commit

Permalink
[4.6] Fix warnings with attrs 19.2 and fix object assertions (#… (#5944)
Browse files Browse the repository at this point in the history
[4.6] Fix warnings with attrs 19.2 and fix object assertions (#5902)
  • Loading branch information
nicoddemus authored Oct 11, 2019
2 parents f2d87dc + c03e46f commit 1cc974c
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 5 deletions.
5 changes: 4 additions & 1 deletion src/_pytest/assertion/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from ..compat import Sequence
from _pytest import outcomes
from _pytest._io.saferepr import saferepr
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 @@ -374,7 +375,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 field.cmp]
fields_to_check = [
field.name for field in all_fields if getattr(field, ATTRS_EQ_FIELD)
]

same = []
diff = []
Expand Down
11 changes: 9 additions & 2 deletions src/_pytest/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import sys
from contextlib import contextmanager

import attr
import py
import six
from six import text_type
Expand Down Expand Up @@ -406,8 +407,8 @@ def _setup_collect_fakemodule():

pytest.collect = ModuleType("pytest.collect")
pytest.collect.__all__ = [] # used for setns
for attr in COLLECT_FAKEMODULE_ATTRIBUTES:
setattr(pytest.collect, attr, getattr(pytest, attr))
for attribute in COLLECT_FAKEMODULE_ATTRIBUTES:
setattr(pytest.collect, attribute, getattr(pytest, attribute))


if _PY2:
Expand Down Expand Up @@ -455,3 +456,9 @@ def dec(fn):

else:
from functools import lru_cache # noqa: F401


if getattr(attr, "__version_info__", ()) >= (19, 2):
ATTRS_EQ_FIELD = "eq"
else:
ATTRS_EQ_FIELD = "cmp"
4 changes: 3 additions & 1 deletion src/_pytest/mark/structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import six

from ..compat import ascii_escaped
from ..compat import ATTRS_EQ_FIELD
from ..compat import getfslineno
from ..compat import MappingMixin
from ..compat import NOTSET
Expand Down Expand Up @@ -377,7 +378,8 @@ def __repr__(self):
return "<NodeKeywords for node %s>" % (self.node,)


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

PY3 = sys.version_info >= (3, 0)

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

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

0 comments on commit 1cc974c

Please sign in to comment.