From 3f4a0b85fd291aa10c7f7bd02fe8a8126b45cc33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Rubinstein?= Date: Mon, 22 Jul 2013 12:27:55 +0200 Subject: [PATCH] Delubac: history: support pagination --- modules/delubac/browser.py | 14 +++++++++++--- modules/delubac/pages.py | 6 ++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/modules/delubac/browser.py b/modules/delubac/browser.py index b345b17a..0f308aed 100644 --- a/modules/delubac/browser.py +++ b/modules/delubac/browser.py @@ -38,7 +38,7 @@ class DelubacBrowser(BaseBrowser): PAGES = { '%s://%s/(simpleIndex|index).do(\;.*)?' % (PROTOCOL, DOMAIN): LoginPage, '%s://%s/tbord.do(\?.*)?' % (PROTOCOL, DOMAIN): DashboardPage, - '%s://%s/releve.do' % (PROTOCOL, DOMAIN): OperationsPage, + '%s://%s/releve.do(\?.*)?' % (PROTOCOL, DOMAIN): OperationsPage, } PAGES_REV = { @@ -79,6 +79,14 @@ class DelubacBrowser(BaseBrowser): def iter_history(self, account): self.location(account._url) - assert self.is_on_page(OperationsPage) - return self.page.iter_history() + while True: + assert self.is_on_page(OperationsPage) + for i in self.page.iter_history(): + yield i + + next_page = self.page.next_page() + if not next_page: + break + + self.location(next_page) diff --git a/modules/delubac/pages.py b/modules/delubac/pages.py index 2086df56..616423ac 100644 --- a/modules/delubac/pages.py +++ b/modules/delubac/pages.py @@ -73,6 +73,7 @@ class DashboardPage(BasePage): class OperationsPage(BasePage): _LINE_XPATH = '//tr[starts-with(@class,"PL_LIGLST_")]' + _NEXT_XPATH = '//a[contains(@class,"pg_next")]/@href' def iter_history(self): i = 0 @@ -92,6 +93,11 @@ class OperationsPage(BasePage): yield operation + def next_page(self): + next_button = self.document.xpath(self._NEXT_XPATH) + if next_button: + return next_button[0] + class Transaction(FrenchTransaction): PATTERNS = [(re.compile('^(?:Vir(?:ement)?|VRT) (?P.*)', re.I),