diff --git a/weboob/tools/capabilities/bank/investments.py b/weboob/tools/capabilities/bank/investments.py index 4ce587778ea1b76a3daa08ff74263d723836b50c..5c01507656ebe6cb454d0efa0f441ce836711eb3 100644 --- a/weboob/tools/capabilities/bank/investments.py +++ b/weboob/tools/capabilities/bank/investments.py @@ -24,6 +24,7 @@ from weboob.tools.compat import basestring from weboob.capabilities.base import NotAvailable from weboob.capabilities.bank import Investment +from weboob.browser.filters.base import Filter, FilterError, debug def is_isin_valid(isin): """ @@ -83,3 +84,33 @@ def create_french_liquidity(valuation): liquidity.code_type = NotAvailable liquidity.valuation = valuation return liquidity + + +# These filters can be used to set Investment.code +# and Investment.code_type without having to declare +# obj_code() and obj_code_type() methods in each module + +class FormatError(FilterError): + pass + + +class IsinCode(Filter): + """ + Returns the input only if it is a valid ISIN code. + """ + @debug() + def filter(self, code): + if is_isin_valid(code): + return code + return self.default_or_raise(FormatError('%r is not a valid ISIN code, no default value was set.' % code)) + + +class IsinType(Filter): + """ + Returns Investment.CODE_TYPE_ISIN if the input is a valid ISIN code. + """ + @debug() + def filter(self, code): + if is_isin_valid(code): + return Investment.CODE_TYPE_ISIN + return NotAvailable