From 2268eb2ff1dab1f60dbb500680b985c9fc137cf7 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sat, 5 Jul 2014 20:21:40 +0200 Subject: [PATCH] ability to use Dict['a']['b']['c'] instead of Dict('a/b/c') (refs #1426) --- weboob/tools/browser2/filters.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/weboob/tools/browser2/filters.py b/weboob/tools/browser2/filters.py index 849b2a36..d9234587 100644 --- a/weboob/tools/browser2/filters.py +++ b/weboob/tools/browser2/filters.py @@ -126,7 +126,23 @@ class _Selector(Filter): 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): + __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 def select(cls, selector, item): if isinstance(item, dict): @@ -134,7 +150,7 @@ class Dict(_Selector): else: content = item.el - for el in selector.split('/'): + for el in selector: if el not in content: return None