diff options
author | holger krekel <holger@merlinux.eu> | 2013-10-03 13:53:22 +0200 |
---|---|---|
committer | holger krekel <holger@merlinux.eu> | 2013-10-03 13:53:22 +0200 |
commit | e49eca8d59bb404521003d67b4f71fbd345790bb (patch) | |
tree | d5d5c2a5ca91961e800ad60880c6504fb6cb747f /_pytest/main.py | |
parent | 263b0e7d999fb48a399f22c3110ba12f85a94850 (diff) | |
download | pytest-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.py | 31 |
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. |