From d817fd742f567c3060b420137a42634a73d8c126 Mon Sep 17 00:00:00 2001 From: Maxime Gasselin Date: Fri, 15 Feb 2019 13:33:42 +0100 Subject: [PATCH] [cmso] Allows inexistant json transfer keys For some accounts some json keys are absent, we have to handle it to avoid iter_account and iter_recipient crash. Closes: 18008@sibi --- modules/cmso/par/browser.py | 6 ++---- modules/cmso/par/transfer_pages.py | 11 +++++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/modules/cmso/par/browser.py b/modules/cmso/par/browser.py index 2c98721073..7e5583c222 100644 --- a/modules/cmso/par/browser.py +++ b/modules/cmso/par/browser.py @@ -175,8 +175,7 @@ def iter_accounts(self): self.page.check_response() for key in self.page.get_keys(): for a in self.page.iter_accounts(key=key): - if a.id in accounts_eligibilite_debit: - a._eligible_debit = accounts_eligibilite_debit[a.id] + a._eligible_debit = accounts_eligibilite_debit.get(a.id, False) # Can have duplicate account, avoid them if a._index not in seen: self.accounts_list.append(a) @@ -187,8 +186,7 @@ def iter_accounts(self): page = self.accounts.go(data=json.dumps({}), type='epargne', headers=self.json_headers) for key in page.get_keys(): for a in page.iter_savings(key=key, numbers=numbers): - if a.id in accounts_eligibilite_debit: - a._eligible_debit = accounts_eligibilite_debit[a.id] + a._eligible_debit = accounts_eligibilite_debit.get(a.id, False) if a._index in seen: acc = seen[a._index] self.accounts_list.remove(acc) diff --git a/modules/cmso/par/transfer_pages.py b/modules/cmso/par/transfer_pages.py index fdfd9fcfbe..d9f567636a 100644 --- a/modules/cmso/par/transfer_pages.py +++ b/modules/cmso/par/transfer_pages.py @@ -72,23 +72,26 @@ def get_transfer_info(self, info): ret = {} ret.update({ - d[key]: d[value] + d[key]: d.get(value) for d in self.doc['listCompteTitulaireCotitulaire'] }) ret.update({ - d[key]: d[value] + d[key]: d.get(value) for p in self.doc['listCompteMandataire'].values() for d in p }) ret.update({ - d[key]: d[value] + d[key]: d.get(value) for p in self.doc['listCompteLegalRep'].values() for d in p }) return ret def get_numbers(self): - return self.get_transfer_info('numbers') + transfer_numbers = self.get_transfer_info('numbers') + for key, value in transfer_numbers.items(): + assert value, "The 'numeroContratSouscrit' associated with the account index: %s is empty" % key + return transfer_numbers def get_eligibilite_debit(self): return self.get_transfer_info('eligibilite_debit') -- GitLab