From a7b5177eaf41f3c0502cde74d53d658d7f2991c5 Mon Sep 17 00:00:00 2001 From: Jerome Berthier Date: Thu, 27 Jun 2019 16:51:57 +0200 Subject: [PATCH] [banquepopulaire] factorize the back action --- modules/banquepopulaire/browser.py | 30 ++++++++++++++++-------------- modules/banquepopulaire/pages.py | 26 +++++++++++++++----------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/modules/banquepopulaire/browser.py b/modules/banquepopulaire/browser.py index db272af60d..dd93b64742 100644 --- a/modules/banquepopulaire/browser.py +++ b/modules/banquepopulaire/browser.py @@ -193,6 +193,20 @@ def deinit(self): no_login = 0 + def follow_back_button_if_any(self, params=None, actions=None): + """ + Look for a Retour button and follow it using a POST + :param params: Optional form params to use (default: call self.page.get_params()) + :param actions: Optional actions to use (default: call self.page.get_button_actions()) + :return: None + """ + if not self.page: + return + + data = self.page.get_back_button_params(params=params, actions=actions) + if data: + self.location('/cyber/internet/ContinueTask.do', data=data) + @no_need_login def do_login(self): self.location(self.BASEURL) @@ -232,13 +246,7 @@ def go_on_accounts_list(self): form.submit() # In case of prevAction maybe we have reached an expanded accounts list page, need to go back - btn = self.page.doc.xpath('.//button[span[text()="Retour"]]') - if len(btn): - _data = self.page.get_params() - actions = self.page.get_button_actions() - _data.update(actions[btn[0].attrib['id']]) - _data['token'] = self.page.build_token(_data['token']) - self.location('/cyber/internet/ContinueTask.do', data=_data) + self.follow_back_button_if_any() @retry(LoggedOut) @need_login @@ -310,13 +318,7 @@ def set_gocardless_transaction_details(self, transaction): transaction.raw = '%s %s' % (transaction.raw, ref) # Needed to preserve navigation. - btn = self.page.doc.xpath('.//button[span[text()="Retour"]]') - if len(btn): - _data = self.page.get_params() - actions = self.page.get_button_actions() - _data.update(actions[btn[0].attrib['id']]) - _data['token'] = self.page.build_token(_data['token']) - self.location('/cyber/internet/ContinueTask.do', data=_data) + self.follow_back_button_if_any() @retry(LoggedOut) @need_login diff --git a/modules/banquepopulaire/pages.py b/modules/banquepopulaire/pages.py index 1c3d81b862..22de573cb2 100644 --- a/modules/banquepopulaire/pages.py +++ b/modules/banquepopulaire/pages.py @@ -164,6 +164,19 @@ def get_button_actions(self): } return actions + def get_back_button_params(self, params=None, actions=None): + btn = self.doc.xpath('.//button[span[text()="Retour"]]') + if not btn: + return + + params = params or self.get_params() + actions = actions or self.get_button_actions() + key = btn[0].attrib['id'] + assert actions.get(key), "Key %s not found in actions %s" % (key, actions) # Currently it never happens + params.update(actions[key]) + params['token'] = self.build_token(params['token']) + return params + class MyHTMLPage(BasePage, HTMLPage): def build_doc(self, data, *args, **kwargs): @@ -649,11 +662,7 @@ def iter_accounts(self, next_pages): yield account # Needed to preserve navigation. - btn = self.doc.xpath('.//button[span[text()="Retour"]]') - if len(btn) > 0: - _params = params.copy() - _params.update(actions[btn[0].attrib['id']]) - self.browser.open('/cyber/internet/ContinueTask.do', data=_params) + self.browser.follow_back_button_if_any(params=params.copy(), actions=actions) class AccountsFullPage(AccountsPage): @@ -750,12 +759,7 @@ def iter_accounts(self, next_pages): yield account # Needed to preserve navigation. - btn = self.doc.xpath('.//button[span[text()="Retour"]]') - if len(btn) > 0: - actions = self.get_button_actions() - _params = params.copy() - _params.update(actions[btn[0].attrib['id']]) - self.browser.open('/cyber/internet/ContinueTask.do', data=_params) + self.browser.follow_back_button_if_any(params=params.copy()) class Transaction(FrenchTransaction): -- GitLab