[4.6] Fix warnings with attrs 19.2 and fix object assertions (#… (#5944)

[4.6] Fix warnings with attrs 19.2 and fix object assertions (#5902)
This commit is contained in:
Bruno Oliveira 2019-10-11 11:13:37 -03:00 committed by GitHub
commit 1cc974c95d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 5 deletions

View File

@ -12,6 +12,7 @@ import _pytest._code
from ..compat import Sequence from ..compat import Sequence
from _pytest import outcomes from _pytest import outcomes
from _pytest._io.saferepr import saferepr 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 # The _reprcompare attribute on the util module is used by the new assertion
# interpretation code and assertion rewriter to detect this plugin was # interpretation code and assertion rewriter to detect this plugin was
@ -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] fields_to_check = [field for field, info in all_fields.items() if info.compare]
elif isattrs(left): elif isattrs(left):
all_fields = left.__attrs_attrs__ 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 = [] same = []
diff = [] diff = []

View File

@ -13,6 +13,7 @@ import re
import sys import sys
from contextlib import contextmanager from contextlib import contextmanager
import attr
import py import py
import six import six
from six import text_type from six import text_type
@ -406,8 +407,8 @@ def _setup_collect_fakemodule():
pytest.collect = ModuleType("pytest.collect") pytest.collect = ModuleType("pytest.collect")
pytest.collect.__all__ = [] # used for setns pytest.collect.__all__ = [] # used for setns
for attr in COLLECT_FAKEMODULE_ATTRIBUTES: for attribute in COLLECT_FAKEMODULE_ATTRIBUTES:
setattr(pytest.collect, attr, getattr(pytest, attr)) setattr(pytest.collect, attribute, getattr(pytest, attribute))
if _PY2: if _PY2:
@ -455,3 +456,9 @@ if six.PY2:
else: else:
from functools import lru_cache # noqa: F401 from functools import lru_cache # noqa: F401
if getattr(attr, "__version_info__", ()) >= (19, 2):
ATTRS_EQ_FIELD = "eq"
else:
ATTRS_EQ_FIELD = "cmp"

View File

@ -8,6 +8,7 @@ import attr
import six import six
from ..compat import ascii_escaped from ..compat import ascii_escaped
from ..compat import ATTRS_EQ_FIELD
from ..compat import getfslineno from ..compat import getfslineno
from ..compat import MappingMixin from ..compat import MappingMixin
from ..compat import NOTSET from ..compat import NOTSET
@ -377,7 +378,8 @@ class NodeKeywords(MappingMixin):
return "<NodeKeywords for node %s>" % (self.node,) 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): class NodeMarkers(object):
""" """
internal structure for storing marks belonging to a node internal structure for storing marks belonging to a node

View File

@ -14,6 +14,7 @@ import pytest
from _pytest import outcomes from _pytest import outcomes
from _pytest.assertion import truncate from _pytest.assertion import truncate
from _pytest.assertion import util from _pytest.assertion import util
from _pytest.compat import ATTRS_EQ_FIELD
PY3 = sys.version_info >= (3, 0) PY3 = sys.version_info >= (3, 0)
@ -687,7 +688,7 @@ class TestAssert_reprcompare_attrsclass(object):
@attr.s @attr.s
class SimpleDataObject(object): class SimpleDataObject(object):
field_a = attr.ib() field_a = attr.ib()
field_b = attr.ib(cmp=False) field_b = attr.ib(**{ATTRS_EQ_FIELD: False})
left = SimpleDataObject(1, "b") left = SimpleDataObject(1, "b")
right = SimpleDataObject(1, "b") right = SimpleDataObject(1, "b")