use a local instance of LinearDateGuesser instead of global one

When giving LinearDateGuesser instance to DateGuesser at Page's
declaration, that'll be the SAME object for all the life-time of the
module. So when listing transactions of a second account, the first taken
date is the date of the oldest transaction of the first account!
This commit is contained in:
Romain Bignon 2015-01-13 16:59:13 +01:00
commit 87070bf05a
4 changed files with 15 additions and 13 deletions

View file

@ -24,6 +24,7 @@ from itertools import chain
from weboob.exceptions import BrowserHTTPError, BrowserIncorrectPassword from weboob.exceptions import BrowserHTTPError, BrowserIncorrectPassword
from weboob.browser import LoginBrowser, URL, need_login from weboob.browser import LoginBrowser, URL, need_login
from weboob.tools.date import LinearDateGuesser
from .pages import LoginPage, AccountsPage, HistoryPage from .pages import LoginPage, AccountsPage, HistoryPage
@ -71,4 +72,6 @@ class CmsoProBrowser(LoginBrowser):
first_page = self.page first_page = self.page
rest_page = self.history.go(data=query) rest_page = self.history.go(data=query)
return chain(first_page.iter_history(), rest_page.iter_history()) date_guesser = LinearDateGuesser()
return chain(first_page.iter_history(date_guesser=date_guesser), rest_page.iter_history(date_guesser=date_guesser))

View file

@ -22,10 +22,9 @@ import datetime
from weboob.browser.pages import HTMLPage, LoggedPage from weboob.browser.pages import HTMLPage, LoggedPage
from weboob.browser.elements import ListElement, ItemElement, method from weboob.browser.elements import ListElement, ItemElement, method
from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, DateGuesser from weboob.browser.filters.standard import CleanText, CleanDecimal, Regexp, DateGuesser, Env
from weboob.browser.filters.html import Link from weboob.browser.filters.html import Link
from weboob.capabilities.bank import Account from weboob.capabilities.bank import Account
from weboob.tools.date import LinearDateGuesser
from ..transaction import Transaction from ..transaction import Transaction
@ -71,10 +70,10 @@ class CmsoTransactionElement(ItemElement):
class HistoryPage(LoggedPage, HTMLPage): class HistoryPage(LoggedPage, HTMLPage):
def iter_history(self): def iter_history(self, *args, **kwargs):
if self.doc.xpath('//a[@href="1-situationGlobaleProfessionnel.act"]'): if self.doc.xpath('//a[@href="1-situationGlobaleProfessionnel.act"]'):
return self.iter_history_rest_page() return self.iter_history_rest_page(*args, **kwargs)
return self.iter_history_first_page() return self.iter_history_first_page(*args, **kwargs)
@method @method
class iter_history_first_page(CmsoListElement): class iter_history_first_page(CmsoListElement):
@ -83,7 +82,7 @@ class HistoryPage(LoggedPage, HTMLPage):
return obj.date >= datetime.date.today().replace(day=1) return obj.date >= datetime.date.today().replace(day=1)
def date(selector): def date(selector):
return DateGuesser(CleanText(selector), LinearDateGuesser()) | Transaction.Date(selector) return DateGuesser(CleanText(selector), Env('date_guesser')) | Transaction.Date(selector)
obj_date = date('./td[1]') obj_date = date('./td[1]')
obj_vdate = date('./td[2]') obj_vdate = date('./td[2]')

View file

@ -20,6 +20,7 @@
from weboob.browser import LoginBrowser, URL, need_login from weboob.browser import LoginBrowser, URL, need_login
from weboob.exceptions import BrowserIncorrectPassword from weboob.exceptions import BrowserIncorrectPassword
from weboob.tools.date import LinearDateGuesser
from .pages import LoginPage, LoginErrorPage, AvoirPage, OperationsTraiteesPage, OperationsFuturesPage from .pages import LoginPage, LoginErrorPage, AvoirPage, OperationsTraiteesPage, OperationsFuturesPage
@ -50,12 +51,12 @@ class GroupamaesBrowser(LoginBrowser):
@need_login @need_login
def get_history(self): def get_history(self):
transactions = list(self.operations_traitees.go().get_history()) transactions = list(self.operations_traitees.go().get_history(date_guesser=LinearDateGuesser()))
transactions.sort(key=lambda tr: tr.rdate, reverse=True) transactions.sort(key=lambda tr: tr.rdate, reverse=True)
return transactions return transactions
@need_login @need_login
def get_coming(self): def get_coming(self):
transactions = list(self.operations_futures.go().get_list()) transactions = list(self.operations_futures.go().get_list(date_guesser=LinearDateGuesser()))
transactions.sort(key=lambda tr: tr.rdate, reverse=True) transactions.sort(key=lambda tr: tr.rdate, reverse=True)
return transactions return transactions

View file

@ -20,9 +20,8 @@
from weboob.browser.pages import HTMLPage, LoggedPage from weboob.browser.pages import HTMLPage, LoggedPage
from weboob.browser.elements import TableElement, ItemElement, method from weboob.browser.elements import TableElement, ItemElement, method
from weboob.browser.filters.standard import CleanText, CleanDecimal, TableCell, Date from weboob.browser.filters.standard import CleanText, CleanDecimal, TableCell, Date, Env
from weboob.capabilities.bank import Account, Transaction from weboob.capabilities.bank import Account, Transaction
from weboob.tools.date import LinearDateGuesser
class LoginPage(HTMLPage): class LoginPage(HTMLPage):
@ -74,7 +73,7 @@ class OperationsFuturesPage(LoggedPage, HTMLPage):
def condition(self): def condition(self):
return u'Aucune opération en attente' not in CleanText(TableCell('date'))(self) return u'Aucune opération en attente' not in CleanText(TableCell('date'))(self)
obj_date = Date(CleanText(TableCell('date')), LinearDateGuesser()) obj_date = Date(CleanText(TableCell('date')), Env('date_guesser'))
obj_type = Transaction.TYPE_UNKNOWN obj_type = Transaction.TYPE_UNKNOWN
obj_label = CleanText(TableCell('operation')) obj_label = CleanText(TableCell('operation'))
obj_amount = CleanDecimal(TableCell('montant'), replace_dots=True) obj_amount = CleanDecimal(TableCell('montant'), replace_dots=True)
@ -96,7 +95,7 @@ class OperationsTraiteesPage(LoggedPage, HTMLPage):
def condition(self): def condition(self):
return u'Aucune opération' not in CleanText(TableCell('date'))(self) return u'Aucune opération' not in CleanText(TableCell('date'))(self)
obj_date = Date(CleanText(TableCell('date')), LinearDateGuesser()) obj_date = Date(CleanText(TableCell('date')), Env('date_guesser'))
obj_type = Transaction.TYPE_UNKNOWN obj_type = Transaction.TYPE_UNKNOWN
obj_label = CleanText(TableCell('operation')) obj_label = CleanText(TableCell('operation'))
obj_amount = CleanDecimal(TableCell('montant'), replace_dots=True) obj_amount = CleanDecimal(TableCell('montant'), replace_dots=True)