Drop the "alias" helper used in MarkDecorator

It is a little too obscure IMO, but the reason I want to drop it is that
type checking has no hope of understanding such dynamic constructs.

The warning argument wasn't used.
This commit is contained in:
Ran Benita 2019-11-08 00:55:23 +02:00
parent 984d90a811
commit 84b2c81db4
2 changed files with 20 additions and 14 deletions

View File

@ -2,7 +2,6 @@ import inspect
import warnings import warnings
from collections import namedtuple from collections import namedtuple
from collections.abc import MutableMapping from collections.abc import MutableMapping
from operator import attrgetter
from typing import Set from typing import Set
import attr import attr
@ -17,16 +16,6 @@ from _pytest.warning_types import PytestUnknownMarkWarning
EMPTY_PARAMETERSET_OPTION = "empty_parameter_set_mark" EMPTY_PARAMETERSET_OPTION = "empty_parameter_set_mark"
def alias(name, warning=None):
getter = attrgetter(name)
def warned(self):
warnings.warn(warning, stacklevel=2)
return getter(self)
return property(getter if warning is None else warned, doc="alias for " + name)
def istestfunc(func): def istestfunc(func):
return ( return (
hasattr(func, "__call__") hasattr(func, "__call__")
@ -205,9 +194,20 @@ class MarkDecorator:
mark = attr.ib(validator=attr.validators.instance_of(Mark)) mark = attr.ib(validator=attr.validators.instance_of(Mark))
name = alias("mark.name") @property
args = alias("mark.args") def name(self):
kwargs = alias("mark.kwargs") """alias for mark.name"""
return self.mark.name
@property
def args(self):
"""alias for mark.args"""
return self.mark.args
@property
def kwargs(self):
"""alias for mark.kwargs"""
return self.mark.kwargs
@property @property
def markname(self): def markname(self):

View File

@ -831,6 +831,12 @@ class TestMarkDecorator:
def test__eq__(self, lhs, rhs, expected): def test__eq__(self, lhs, rhs, expected):
assert (lhs == rhs) == expected assert (lhs == rhs) == expected
def test_aliases(self) -> None:
md = pytest.mark.foo(1, "2", three=3)
assert md.name == "foo"
assert md.args == (1, "2")
assert md.kwargs == {"three": 3}
@pytest.mark.parametrize("mark", [None, "", "skip", "xfail"]) @pytest.mark.parametrize("mark", [None, "", "skip", "xfail"])
def test_parameterset_for_parametrize_marks(testdir, mark): def test_parameterset_for_parametrize_marks(testdir, mark):