ability to use Dict['a']['b']['c'] instead of Dict('a/b/c') (refs #1426)

This commit is contained in:
Romain Bignon 2014-07-05 20:21:40 +02:00
commit 2268eb2ff1

View file

@ -126,7 +126,23 @@ class _Selector(Filter):
return self.default_or_raise(ParseError('Element %r not found' % self.selector)) return self.default_or_raise(ParseError('Element %r not found' % self.selector))
class _DictMeta(type):
def __getitem__(cls, name):
return cls(name)
class Dict(_Selector): class Dict(_Selector):
__metaclass__ = _DictMeta
def __init__(self, selector=None, default=_NO_DEFAULT):
super(Dict, self).__init__(self, default=default)
self.selector = selector.split('/') if selector is not None else []
def __getitem__(self, name):
self.selector.append(name)
return self
@classmethod @classmethod
def select(cls, selector, item): def select(cls, selector, item):
if isinstance(item, dict): if isinstance(item, dict):
@ -134,7 +150,7 @@ class Dict(_Selector):
else: else:
content = item.el content = item.el
for el in selector.split('/'): for el in selector:
if el not in content: if el not in content:
return None return None