From bc08478cf8b8a04e12e5f69f94331e5a7a02a122 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sun, 5 Jul 2015 16:57:06 +0200 Subject: [PATCH] fix parsing of balances if accounts page has been configured by user to display balance in several currencies --- modules/creditmutuel/pages.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/creditmutuel/pages.py b/modules/creditmutuel/pages.py index 0098a29a..2fde7807 100644 --- a/modules/creditmutuel/pages.py +++ b/modules/creditmutuel/pages.py @@ -23,7 +23,7 @@ try: except ImportError: from urllib.parse import urlparse, parse_qs -from decimal import Decimal +from decimal import Decimal, InvalidOperation import re from dateutil.relativedelta import relativedelta @@ -31,7 +31,7 @@ from weboob.browser.pages import HTMLPage, FormNotFound, LoggedPage from weboob.browser.elements import ListElement, ItemElement, SkipItem, method from weboob.browser.filters.standard import Filter, Env, CleanText, CleanDecimal, Field, TableCell from weboob.browser.filters.html import Link -from weboob.exceptions import BrowserIncorrectPassword +from weboob.exceptions import BrowserIncorrectPassword, ParseError from weboob.capabilities import NotAvailable from weboob.capabilities.bank import Account from weboob.tools.capabilities.bank.transactions import FrenchTransaction @@ -151,7 +151,16 @@ class AccountsPage(LoggedPage, HTMLPage): if 'rib' not in p and 'webid' not in p: raise SkipItem() - balance = CleanDecimal('./td[2] | ./td[3]', replace_dots=True)(self) + for td in el.xpath('./td[2] | ./td[3]'): + try: + balance = CleanDecimal('.', replace_dots=True)(td) + except InvalidOperation: + continue + else: + break + else: + raise ParseError('Unable to find balance for account %s' % CleanText('./td[1]/a')(el)) + id = p['rib'][0] if 'rib' in p else p['webid'][0] # Handle cards