From b146c77df9354fecb42c24c87ecd316ceddba8cd Mon Sep 17 00:00:00 2001 From: Maxime Pommier Date: Mon, 15 Apr 2019 10:00:21 +0200 Subject: [PATCH] [browser.filters] Add MapIn filter, that allow the pattern of a selected value to another value using a dict. --- weboob/browser/filters/standard.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/weboob/browser/filters/standard.py b/weboob/browser/filters/standard.py index 4357364db4..eab5e5142e 100644 --- a/weboob/browser/filters/standard.py +++ b/weboob/browser/filters/standard.py @@ -41,7 +41,7 @@ 'Field', 'Regexp', 'Map', 'DateTime', 'Date', 'Time', 'DateGuesser', 'Duration', 'MultiFilter', 'CombineDate', 'Format', 'Join', 'Type', 'Eval', 'BrowserURL', 'Async', 'AsyncLoad', - 'QueryValue', 'Coalesce'] + 'QueryValue', 'Coalesce', 'MapIn'] class ColumnNotFound(FilterError): @@ -694,6 +694,30 @@ def filter(self, txt): return self.default_or_raise(ItemNotFound('Unable to handle %r on %r' % (txt, self.map_dict))) +class MapIn(Filter): + """ + Map the pattern of a selected value to another value using a dict. + """ + + def __init__(self, selector, map_dict, default=_NO_DEFAULT): + """ + :param selector: key from `map_dict` to use + """ + super(MapIn, self).__init__(selector, default=default) + self.map_dict = map_dict + + @debug() + def filter(self, txt): + """ + :raises: :class:`ItemNotFound` if key pattern does not exist in dict + """ + for key in self.map_dict: + if key in txt: + return self.map_dict[key] + + return self.default_or_raise(ItemNotFound('Unable to handle %r on %r' % (txt, self.map_dict))) + + class DateTime(Filter): """Parse date and time.""" -- GitLab