use uniq IDs for accounts

This commit is contained in:
Romain Bignon 2012-04-18 00:55:23 +02:00
commit 011dcc9688
3 changed files with 25 additions and 22 deletions

View file

@ -50,8 +50,6 @@ class CreditMutuelBackend(BaseBackend, ICapBank):
yield account
def get_account(self, _id):
if not _id.isdigit():
raise AccountNotFound()
account = self.browser.get_account(_id)
if account:
return account

View file

@ -22,7 +22,8 @@ from weboob.tools.browser import BaseBrowser, BrowserIncorrectPassword
from weboob.capabilities.bank import Transfer, TransferError
from datetime import datetime
from .pages import LoginPage, LoginErrorPage, AccountsPage, UserSpacePage, OperationsPage, InfoPage, TransfertPage
from .pages import LoginPage, LoginErrorPage, AccountsPage, UserSpacePage, \
OperationsPage, NoOperationsPage, InfoPage, TransfertPage
__all__ = ['CreditMutuelBrowser']
@ -34,12 +35,13 @@ class CreditMutuelBrowser(BaseBrowser):
ENCODING = 'iso-8859-1'
USER_AGENT = BaseBrowser.USER_AGENTS['wget']
PAGES = {'https://www.creditmutuel.fr/groupe/fr/index.html': LoginPage,
'https://www.creditmutuel.fr/groupe/fr/identification/default.cgi': LoginErrorPage,
'https://www.creditmutuel.fr/.*/fr/identification/default.cgi': LoginErrorPage,
'https://www.creditmutuel.fr/.*/fr/banque/situation_financiere.cgi': AccountsPage,
'https://www.creditmutuel.fr/.*/fr/banque/espace_personnel.aspx': UserSpacePage,
'https://www.creditmutuel.fr/.*/fr/banque/mouvements.cgi.*': OperationsPage,
'https://www.creditmutuel.fr/.*/fr/banque/nr/nr_devbooster.aspx.*': OperationsPage,
'https://www.creditmutuel.fr/.*/fr/banque/operations_carte\.cgi.*': OperationsPage,
'https://www.creditmutuel.fr/.*/fr/banque/arrivees\.asp.*': NoOperationsPage,
'https://www.creditmutuel.fr/.*/fr/banque/BAD.*': InfoPage,
'https://www.creditmutuel.fr/.*/fr/banque/.*Vir.*': TransfertPage
}
@ -50,7 +52,7 @@ class CreditMutuelBrowser(BaseBrowser):
#self.currentSubBank = None
def is_logged(self):
return self.page and not self.is_on_page(LoginPage)
return self.page and not self.is_on_page(LoginPage) and not self.is_on_page(LoginErrorPage)
def home(self):
return self.location('https://www.creditmutuel.fr/groupe/fr/index.html')
@ -102,16 +104,9 @@ class CreditMutuelBrowser(BaseBrowser):
self.location(page_url)
else:
self.location('https://%s/%s/fr/banque/%s' % (self.DOMAIN, self.currentSubBank, page_url))
#for page_operation in self.page.get_history(operations_count):
# operations_count += 1
# yield page_operation
## FONCTIONNE
#for op in self.page.get_history():
# yield op
## FONTIONNE
#return self.page.get_history()
if not self.is_on_page(OperationsPage):
break
for op in self.page.get_history():
l_ret.append(op)

View file

@ -18,6 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
from urlparse import urlparse, parse_qs
from decimal import Decimal
import re
@ -30,7 +31,7 @@ class LoginPage(BasePage):
self.browser.select_form(nr=0)
self.browser['_cm_user'] = login
self.browser['_cm_pwd'] = passwd
self.browser.submit()
self.browser.submit(nologin=True)
class LoginErrorPage(BasePage):
pass
@ -46,23 +47,30 @@ class UserSpacePage(BasePage):
class AccountsPage(BasePage):
def get_list(self):
l = []
ids = set()
for tr in self.document.getiterator('tr'):
first_td = tr.getchildren()[0]
if (first_td.attrib.get('class', '') == 'i g' or first_td.attrib.get('class', '') == 'p g') \
and first_td.find('a') is not None:
account = Account()
account.label = u"%s"%first_td.find('a').text.strip().lstrip(' 0123456789')
account.label = u"%s"%first_td.find('a').text.strip().lstrip(' 0123456789').capitalize()
account._link_id = first_td.find('a').get('href', '')
if account._link_id.startswith('POR_SyntheseLst'):
continue
account.id = first_td.find('a').text.split(' ')[0]+first_td.find('a').text.split(' ')[1]
if not account.id.isdigit():
url = urlparse(account._link_id)
p = parse_qs(account._link_id)
if not 'rib' in p:
continue
account.id = p['rib'][0]
if account.id in ids:
continue
ids.add(account.id)
s = tr.getchildren()[2].text
if s.strip() == "":
s = tr.getchildren()[1].text
@ -73,9 +81,7 @@ class AccountsPage(BasePage):
if c == ',':
balance += '.'
account.balance = Decimal(balance)
l.append(account)
#raise NotImplementedError()
return l
yield account
def next_page_url(self):
""" TODO pouvoir passer à la page des comptes suivante """
@ -149,3 +155,7 @@ class OperationsPage(BasePage):
def next_page_url(self):
""" TODO pouvoir passer à la page des opérations suivantes """
return 0
class NoOperationsPage(OperationsPage):
def get_history(self):
return iter([])