From 649d777ac50cc23625209415cd43fc99bcef233f Mon Sep 17 00:00:00 2001 From: Oleg Plakhotniuk Date: Fri, 29 Aug 2014 12:50:35 -0500 Subject: [PATCH] Transaction amounts cleaner helper for american banks. Signed-off-by: Oleg Plakhotniuk --- setup.cfg | 1 + .../tools/capabilities/bank/transactions.py | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/setup.cfg b/setup.cfg index 46b2145e1c..2d72ecb98a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,6 +4,7 @@ detailed-errors = 1 with-doctest = 1 where = weboob tests = weboob.capabilities.bank, + weboob.tools.capabilities.bank.transactions, weboob.tools.capabilities.paste, weboob.tools.application.formatters.json, weboob.tools.application.formatters.table, diff --git a/weboob/tools/capabilities/bank/transactions.py b/weboob/tools/capabilities/bank/transactions.py index c0256243a2..0f0b76ae27 100644 --- a/weboob/tools/capabilities/bank/transactions.py +++ b/weboob/tools/capabilities/bank/transactions.py @@ -315,3 +315,27 @@ def __call__(self, item): pass return Decimal('0') + + +class AmericanTransaction(Transaction): + """ + Transaction with some helpers for american bank websites. + """ + @classmethod + def clean_amount(klass, text): + """ + Clean a string containing an amount. + """ + # Convert "American" UUU.CC format to "French" UUU,CC format + if re.search(r'\d\.\d\d(?: [A-Z]+)?$', text): + text = text.replace(',', ' ').replace('.', ',') + return FrenchTransaction.clean_amount(text) + +def test(): + clean_amount = AmericanTransaction.clean_amount + assert clean_amount('42') == '42' + assert clean_amount('42,12') == '42.12' + assert clean_amount('42.12') == '42.12' + assert clean_amount('$42.12 USD') == '42.12' + assert clean_amount('$12.442,12 USD') == '12442.12' + assert clean_amount('$12,442.12 USD') == '12442.12' -- GitLab