From 3a68deb9e5e43fb905a35c180972eac18e7bc756 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Thu, 11 Oct 2012 11:46:48 +0200 Subject: [PATCH] support multi cards list --- modules/societegenerale/browser.py | 12 ++++++++++-- modules/societegenerale/pages/accounts_list.py | 11 ++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/societegenerale/browser.py b/modules/societegenerale/browser.py index 977af152..2e87fa92 100644 --- a/modules/societegenerale/browser.py +++ b/modules/societegenerale/browser.py @@ -20,7 +20,7 @@ from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword, BrowserUnavailable -from .pages.accounts_list import AccountsList, AccountHistory +from .pages.accounts_list import AccountsList, AccountHistory, CardsList from .pages.login import LoginPage, BadLoginPage @@ -39,6 +39,7 @@ class SocieteGenerale(BaseBrowser): 'https://.*.societegenerale.fr//acces/authlgn.html': BadLoginPage, 'https://.*.societegenerale.fr/error403.html': BadLoginPage, '.*restitution/cns_listeprestation.html': AccountsList, + '.*restitution/cns_listeCartes.*.html.*': CardsList, '.*restitution/cns_detail.*\.html.*': AccountHistory, } @@ -112,7 +113,14 @@ class SocieteGenerale(BaseBrowser): for card_link in account._card_links: self.location(card_link) - transactions += list(self.page.iter_transactions(coming=True)) + if self.is_on_page(CardsList): + for card_link in self.page.iter_cards(): + self.location(card_link) + transactions += list(self.page.iter_transactions(coming=True)) + elif self.is_on_page(AccountHistory): + transactions += list(self.page.iter_transactions(coming=True)) + else: + self.logger.warning('This card is not supported') def key(tr): # Can't compare datetime and date, so cast them. diff --git a/modules/societegenerale/pages/accounts_list.py b/modules/societegenerale/pages/accounts_list.py index 87a35b15..6b7622e4 100644 --- a/modules/societegenerale/pages/accounts_list.py +++ b/modules/societegenerale/pages/accounts_list.py @@ -31,7 +31,7 @@ from weboob.tools.browser import BrokenPageError from .base import BasePage -__all__ = ['AccountsList', 'AccountHistory'] +__all__ = ['AccountsList', 'CardsList', 'AccountHistory'] class AccountsList(BasePage): @@ -80,6 +80,15 @@ class AccountsList(BasePage): accounts.append(account) return iter(accounts) +class CardsList(BasePage): + def iter_cards(self): + for tr in self.document.getiterator('tr'): + tds = tr.findall('td') + if len(tds) < 4 or tds[0].attrib.get('class', '') != 'tableauIFrameEcriture1': + continue + + yield tr.xpath('.//a')[0].attrib['href'] + class Transaction(FrenchTransaction): PATTERNS = [(re.compile(r'^CARTE \w+ RETRAIT DAB.* (?P
\d{2})/(?P\d{2})( (?P\d+)H(?P\d+))? (?P.*)'), FrenchTransaction.TYPE_WITHDRAWAL),