From 5dcfb7738d823bad4ce2784deb6c5e350db3be6b Mon Sep 17 00:00:00 2001 From: Bezleputh Date: Tue, 22 Sep 2015 15:07:35 +0200 Subject: [PATCH] [filters] Add a Decode filter taht aims to decode urlencoded strings --- weboob/browser/filters/standard.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/weboob/browser/filters/standard.py b/weboob/browser/filters/standard.py index 6e25f8ed..fcd816c3 100644 --- a/weboob/browser/filters/standard.py +++ b/weboob/browser/filters/standard.py @@ -233,6 +233,29 @@ class Base(Filter): self.base = base +class Decode(Filter): + """ + Filter that aims to decode urlencoded strings + + >>> Decode(Env(_id)) + >>> Decode(Link(./a)) + + """ + def __call__(self, item): + self.encoding = item.page.ENCODING if item.page.ENCODING else 'utf-8' + return self.filter(self.select(self.selector, item, key=self._key, obj=self._obj)) + + @debug() + def filter(self, txt): + from urllib import unquote + try: + txt = unquote(txt.encode('ascii')).decode(self.encoding) + except (UnicodeDecodeError, UnicodeEncodeError): + pass + + return txt + + class Env(_Filter): """ Filter to get environment value of the item.