Skip to content

Commit 6668c00

Browse files
marker plugin: restructure and simplify marker transfer
1 parent 75e040f commit 6668c00

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

_pytest/mark/utils.py

+18-15
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from .model import apply_mark
1+
from .model import apply_mark, MarkDecorator
22

33

44
def _marked(func, mark):
@@ -13,19 +13,22 @@ def _marked(func, mark):
1313
return mark.args == func_mark.args and mark.kwargs == func_mark.kwargs
1414

1515

16+
def get_marks(obj):
17+
try:
18+
maybe_mark = obj.pytestmark
19+
except AttributeError:
20+
return []
21+
else:
22+
if isinstance(maybe_mark, list):
23+
return maybe_mark
24+
elif isinstance(maybe_mark, MarkDecorator):
25+
return [maybe_mark.mark]
26+
else:
27+
raise TypeError('%r is not a mark' % (maybe_mark,))
28+
29+
1630
def transfer_markers(funcobj, cls, mod):
17-
# XXX this should rather be code in the mark plugin or the mark
18-
# plugin should merge with the python plugin.
1931
for holder in (cls, mod):
20-
try:
21-
pytestmark = holder.pytestmark
22-
except AttributeError:
23-
continue
24-
if isinstance(pytestmark, list):
25-
for mark in pytestmark:
26-
27-
if not _marked(funcobj, mark):
28-
apply_mark(mark=mark, obj=funcobj)
29-
else:
30-
if not _marked(funcobj, pytestmark):
31-
apply_mark(mark=pytestmark, obj=funcobj)
32+
for mark in get_marks(holder):
33+
if not _marked(funcobj, mark):
34+
apply_mark(mark=mark, obj=funcobj)

0 commit comments

Comments
 (0)