move nodekeywords to the mark structures

This commit is contained in:
Ronny Pfannschmidt 2018-03-09 10:23:18 +01:00
parent c9b9d796e6
commit 45b6b7df92
2 changed files with 38 additions and 39 deletions

View File

@ -1,4 +1,4 @@
from collections import namedtuple from collections import namedtuple, MutableMapping as MappingMixin
import warnings import warnings
from operator import attrgetter from operator import attrgetter
import inspect import inspect
@ -328,3 +328,39 @@ class MarkGenerator(object):
MARK_GEN = MarkGenerator() MARK_GEN = MarkGenerator()
class NodeKeywords(MappingMixin):
def __init__(self, node):
self.node = node
self.parent = node.parent
self._markers = {node.name: True}
def __getitem__(self, key):
try:
return self._markers[key]
except KeyError:
if self.parent is None:
raise
return self.parent.keywords[key]
def __setitem__(self, key, value):
self._markers[key] = value
def __delitem__(self, key):
raise ValueError("cannot delete key in keywords dict")
def __iter__(self):
seen = set(self._markers)
if self.parent is not None:
seen.update(self.parent.keywords)
return iter(seen)
def __len__(self):
return len(self.__iter__())
def keys(self):
return list(self)
def __repr__(self):
return "<NodeKeywords for node %s>" % (self.node, )

View File

@ -1,5 +1,4 @@
from __future__ import absolute_import, division, print_function from __future__ import absolute_import, division, print_function
from collections import MutableMapping as MappingMixin
import os import os
import six import six
@ -7,7 +6,7 @@ import py
import attr import attr
import _pytest import _pytest
from _pytest.mark.structures import NodeKeywords
SEP = "/" SEP = "/"
@ -66,42 +65,6 @@ class _CompatProperty(object):
return getattr(__import__('pytest'), self.name) return getattr(__import__('pytest'), self.name)
class NodeKeywords(MappingMixin):
def __init__(self, node):
self.node = node
self.parent = node.parent
self._markers = {node.name: True}
def __getitem__(self, key):
try:
return self._markers[key]
except KeyError:
if self.parent is None:
raise
return self.parent.keywords[key]
def __setitem__(self, key, value):
self._markers[key] = value
def __delitem__(self, key):
raise ValueError("cannot delete key in keywords dict")
def __iter__(self):
seen = set(self._markers)
if self.parent is not None:
seen.update(self.parent.keywords)
return iter(seen)
def __len__(self):
return len(self.__iter__())
def keys(self):
return list(self)
def __repr__(self):
return "<NodeKeywords for node %s>" % (self.node, )
class Node(object): class Node(object):
""" base class for Collector and Item the test collection tree. """ base class for Collector and Item the test collection tree.
Collector subclasses have children, Items are terminal nodes.""" Collector subclasses have children, Items are terminal nodes."""