summaryrefslogtreecommitdiff
path: root/_pytest/main.py
diff options
context:
space:
mode:
authorholger krekel <holger@merlinux.eu>2013-10-03 13:53:22 +0200
committerholger krekel <holger@merlinux.eu>2013-10-03 13:53:22 +0200
commite49eca8d59bb404521003d67b4f71fbd345790bb (patch)
treed5d5c2a5ca91961e800ad60880c6504fb6cb747f /_pytest/main.py
parent263b0e7d999fb48a399f22c3110ba12f85a94850 (diff)
downloadpytest-e49eca8d59bb404521003d67b4f71fbd345790bb.tar.gz
simplify the implementation of NodeKeywords getting rid of __ descriptors appearing there.
Diffstat (limited to '_pytest/main.py')
-rw-r--r--_pytest/main.py31
1 files changed, 20 insertions, 11 deletions
diff --git a/_pytest/main.py b/_pytest/main.py
index 61095f62f..4cca93ff1 100644
--- a/_pytest/main.py
+++ b/_pytest/main.py
@@ -170,30 +170,39 @@ def compatproperty(name):
class NodeKeywords(MappingMixin):
def __init__(self, node):
- parent = node.parent
- bases = parent and (parent.keywords._markers,) or ()
- self._markers = type("dynmarker", bases, {node.name: True})
+ self.node = node
+ self.parent = node.parent
+ self._markers = {node.name: True}
def __getitem__(self, key):
try:
- return getattr(self._markers, key)
- except AttributeError:
- raise KeyError(key)
+ return self._markers[key]
+ except KeyError:
+ if self.parent is None:
+ raise
+ return self.parent.keywords[key]
def __setitem__(self, key, value):
- setattr(self._markers, key, value)
+ self._markers[key] = value
def __delitem__(self, key):
- delattr(self._markers, key)
+ raise ValueError("cannot delete key in keywords dict")
def __iter__(self):
- return iter(self.keys())
+ seen = set(self._markers)
+ if self.parent is not None:
+ seen.update(self.parent.keywords)
+ return iter(seen)
def __len__(self):
- return len(self.keys())
+ return len(self.__iter__())
def keys(self):
- return dir(self._markers)
+ return list(self)
+
+ def __repr__(self):
+ return "<NodeKeywords for node %s>" % (self.node, )
+
class Node(object):
""" base class for Collector and Item the test collection tree.