From e722331d873862a695956fef0d0638b9797da9b5 Mon Sep 17 00:00:00 2001 From: Damien Mat Date: Mon, 8 Feb 2021 16:18:25 +0100 Subject: [PATCH] [societegenerale] Better detect logged out state When reloading state and requesting the last page visited, when that page is one of the one in json_pages.py, we are usally logged out. This is handled in AccountJsonPage with a special Logged property. But it needs to be as well in the other pages. We do that by introducing a LoggedDetectionMixin, inherited by a SGPEJsonPage, common to all subsequent pages. --- modules/societegenerale/sgpe/json_pages.py | 38 +++++++++++++--------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/modules/societegenerale/sgpe/json_pages.py b/modules/societegenerale/sgpe/json_pages.py index 22e6482f3d..cebde25bdd 100644 --- a/modules/societegenerale/sgpe/json_pages.py +++ b/modules/societegenerale/sgpe/json_pages.py @@ -26,7 +26,7 @@ import requests -from weboob.browser.pages import LoggedPage, JsonPage, pagination +from weboob.browser.pages import JsonPage, pagination from weboob.browser.elements import ItemElement, method, DictElement from weboob.browser.filters.standard import ( CleanDecimal, CleanText, Coalesce, Date, Format, BrowserURL, Env, @@ -51,7 +51,17 @@ from .pages import Transaction -class AccountsJsonPage(LoggedPage, JsonPage): +class LoggedDetectionMixin(object): + @property + def logged(self): + return Dict('commun/raison', default=None)(self.doc) != "niv_auth_insuff" + + +class SGPEJsonPage(LoggedDetectionMixin, JsonPage): + pass + + +class AccountsJsonPage(SGPEJsonPage): ENCODING = 'utf-8' TYPES = { @@ -71,10 +81,6 @@ class AccountsJsonPage(LoggedPage, JsonPage): 'PrĂȘt': Account.TYPE_LOAN, } - @property - def logged(self): - return Dict('commun/raison', default=None)(self.doc) != "niv_auth_insuff" - def on_load(self): if self.doc['commun']['statut'].lower() == 'nok': reason = self.doc['commun']['raison'] @@ -142,12 +148,12 @@ def get_error(self): return None -class CardsInformationPage(LoggedPage, JsonPage): +class CardsInformationPage(SGPEJsonPage): def get_card_id(self): return self.response.json()['donnees'][0].get('idPPouPM') -class CardsInformation2Page(LoggedPage, JsonPage): +class CardsInformation2Page(SGPEJsonPage): def get_number(self): return self.response.json().get('donnees')[0].get('numero') @@ -155,7 +161,7 @@ def get_due_date(self): return self.response.json().get('donnees')[0].get('dateRegelement') -class DeferredCardJsonPage(LoggedPage, JsonPage): +class DeferredCardJsonPage(SGPEJsonPage): def get_account_id(self): return self.response.json().get('donnees')[0].get('idPrestationCompte') @@ -183,7 +189,7 @@ def condition(self): obj_currency = CleanText(Dict('currentOutstandingAmount/currencyCode')) -class DeferredCardHistoryJsonPage(LoggedPage, JsonPage): +class DeferredCardHistoryJsonPage(SGPEJsonPage): @method class iter_comings(DictElement): item_xpath = 'donnees' @@ -200,7 +206,7 @@ def obj_amount(self): return Decimal(Dict('montant/montant')(self)) / (10 ** Decimal(Dict('montant/nbrDecimales')(self))) -class BalancesJsonPage(LoggedPage, JsonPage): +class BalancesJsonPage(SGPEJsonPage): def on_load(self): if self.doc['commun']['statut'] == 'NOK': reason = self.doc['commun']['raison'] @@ -217,7 +223,7 @@ def populate_balances(self, accounts): yield account -class HistoryJsonPage(LoggedPage, JsonPage): +class HistoryJsonPage(SGPEJsonPage): def get_value(self): if 'NOK' in self.doc['commun']['statut']: @@ -337,7 +343,7 @@ def parse(self, el): self.env['rdate'], self.env['date'] = self.env['date'], self.env['rdate'] -class ProfilePEPage(LoggedPage, JsonPage): +class ProfilePEPage(SGPEJsonPage): @method class get_profile(ItemElement): klass = Person @@ -365,7 +371,7 @@ class get_profile(ItemElement): obj_company_name = Dict('donnees/raisonSocialeEntreprise', default=NotAvailable) -class BankStatementPage(LoggedPage, JsonPage): +class BankStatementPage(SGPEJsonPage): def get_min_max_date(self): min_date = Date(Dict('donnees/criteres/dateMin'), dayfirst=True, default=None)(self.doc) max_date = Date(Dict('donnees/criteres/dateMax'), dayfirst=True, default=None)(self.doc) @@ -399,7 +405,7 @@ def iter_documents(self): yield d -class MarketAccountPage(LoggedPage, JsonPage): +class MarketAccountPage(SGPEJsonPage): @method class iter_market_accounts(DictElement): item_xpath = 'donnees/comptesTitresByClasseur' @@ -425,7 +431,7 @@ class item(ItemElement): obj_type = Account.TYPE_MARKET -class MarketInvestmentPage(LoggedPage, JsonPage): +class MarketInvestmentPage(SGPEJsonPage): @method class iter_investment(DictElement): item_xpath = 'donnees' -- GitLab