fixes on fortuneo module
browser.py:
added condition on login page
test in home removed
pages/accounts_list.py
code refactor
BrokenPageError is thrown if the <tr> table is void
cosmetic changes
added a TODO for FrenchTransaction implementation
not needed code lines deleted
list concatenation in a smarter way
pages/login.py
BrowserUnavailable() implemented to throw an exception when the site is in maintenance
smarter list concatenation
test.py
working test (was not really implemented)
This commit is contained in:
parent
d9c8e9ccdb
commit
cd5f29a0f9
4 changed files with 27 additions and 24 deletions
|
|
@ -45,8 +45,7 @@ class Fortuneo(BaseBrowser):
|
||||||
|
|
||||||
def home(self):
|
def home(self):
|
||||||
"""main page (login)"""
|
"""main page (login)"""
|
||||||
if not self.is_on_page(AccountHistoryPage):
|
self.location('/fr/prive/identification.jsp')
|
||||||
self.location('/fr/prive/identification.jsp')
|
|
||||||
|
|
||||||
def is_logged(self):
|
def is_logged(self):
|
||||||
"""Return True if we are logged on website"""
|
"""Return True if we are logged on website"""
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,8 @@ import datetime
|
||||||
|
|
||||||
from weboob.capabilities.bank import Account
|
from weboob.capabilities.bank import Account
|
||||||
from weboob.tools.capabilities.bank.transactions import Transaction
|
from weboob.tools.capabilities.bank.transactions import Transaction
|
||||||
from weboob.tools.browser import BasePage #, BrokenPageError
|
from weboob.tools.browser import BasePage, BrokenPageError
|
||||||
|
from weboob.capabilities import NotAvailable
|
||||||
__all__ = ['AccountsList', 'AccountHistoryPage']
|
__all__ = ['AccountsList', 'AccountHistoryPage']
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -31,22 +32,24 @@ class AccountHistoryPage(BasePage):
|
||||||
def get_operations(self, _id):
|
def get_operations(self, _id):
|
||||||
"""history, see http://docs.weboob.org/api/capabilities/bank.html?highlight=transaction#weboob.capabilities.bank.Transaction"""
|
"""history, see http://docs.weboob.org/api/capabilities/bank.html?highlight=transaction#weboob.capabilities.bank.Transaction"""
|
||||||
|
|
||||||
|
# TODO need to rewrite that with FrenchTransaction class http://tinyurl.com/6lq4r9t
|
||||||
operations = []
|
operations = []
|
||||||
tables = self.document.findall(".//*[@id='tabHistoriqueOperations']/tbody/tr")
|
tables = self.document.findall(".//*[@id='tabHistoriqueOperations']/tbody/tr")
|
||||||
|
|
||||||
|
if len(tables) == 0:
|
||||||
|
raise BrokenPageError
|
||||||
|
|
||||||
for i in range(len(tables)):
|
for i in range(len(tables)):
|
||||||
operation = Transaction(len(operations))
|
operation = Transaction(len(operations))
|
||||||
|
|
||||||
date_oper = tables[i].xpath("./td[2]/text()")[0]
|
date_oper = tables[i].xpath("./td[2]/text()")[0]
|
||||||
date_val = tables[i].xpath("./td[3]/text()")[0]
|
date_val = tables[i].xpath("./td[3]/text()")[0]
|
||||||
label = tables[i].xpath("./td[4]/text()")[0]
|
label = tables[i].xpath("./td[4]/text()")[0]
|
||||||
label = label.strip()
|
operation.label = label.strip()
|
||||||
amount = tables[i].xpath("./td[5]/text() | ./td[6]/text()")
|
amount = tables[i].xpath("./td[5]/text() | ./td[6]/text()")
|
||||||
operation.date = datetime.datetime.strptime(date_val, "%d/%m/%Y")
|
operation.date = datetime.datetime.strptime(date_val, "%d/%m/%Y")
|
||||||
operation.rdate = datetime.datetime.strptime(date_oper,"%d/%m/%Y")
|
operation.rdate = datetime.datetime.strptime(date_oper,"%d/%m/%Y")
|
||||||
operation.type = 0
|
operation.type = 0
|
||||||
operation.raw = label
|
|
||||||
operation.label = u""+label
|
|
||||||
|
|
||||||
if amount[1] == u'\xa0':
|
if amount[1] == u'\xa0':
|
||||||
amount = amount[0].replace(u"\xa0", "").replace(",", ".").strip()
|
amount = amount[0].replace(u"\xa0", "").replace(",", ".").strip()
|
||||||
|
|
@ -54,9 +57,7 @@ class AccountHistoryPage(BasePage):
|
||||||
amount = amount[1].replace(u"\xa0", "").replace(",", ".").strip()
|
amount = amount[1].replace(u"\xa0", "").replace(",", ".").strip()
|
||||||
operation.amount = Decimal(amount)
|
operation.amount = Decimal(amount)
|
||||||
|
|
||||||
operation.category = u" " # blank category
|
operation.category = NotAvailable
|
||||||
operation.origin = u" " # blank origin
|
|
||||||
operation.recipient = u" " # blank rcpt
|
|
||||||
|
|
||||||
operations.append(operation)
|
operations.append(operation)
|
||||||
|
|
||||||
|
|
@ -71,7 +72,6 @@ class AccountsList(BasePage):
|
||||||
|
|
||||||
# account.id
|
# account.id
|
||||||
account.id = cpt.xpath("./td[1]/a/text()")[0]
|
account.id = cpt.xpath("./td[1]/a/text()")[0]
|
||||||
account.id = str(account.id)
|
|
||||||
|
|
||||||
# account balance
|
# account balance
|
||||||
account.balance = Decimal(cpt.xpath("./td[3]/text()")[0].replace("EUR", "").replace("\n", "").replace("\t", "").replace(u"\xa0", ""))
|
account.balance = Decimal(cpt.xpath("./td[3]/text()")[0].replace("EUR", "").replace("\n", "").replace("\t", "").replace(u"\xa0", ""))
|
||||||
|
|
@ -87,15 +87,13 @@ class AccountsList(BasePage):
|
||||||
# account._link_id
|
# account._link_id
|
||||||
url_to_parse = cpt.xpath('./td[1]/a/@href')[0] # link
|
url_to_parse = cpt.xpath('./td[1]/a/@href')[0] # link
|
||||||
compte_id_re = re.compile(r'.*COMPTE_ACTIF=([^\&]+)\&.*')
|
compte_id_re = re.compile(r'.*COMPTE_ACTIF=([^\&]+)\&.*')
|
||||||
account._link_id = '/fr/prive/mes-comptes/livret/consulter-situation/consulter-solde.jsp?COMPTE_ACTIF='+compte_id_re.search(str(url_to_parse)).groups()[0]
|
account._link_id = '/fr/prive/mes-comptes/livret/consulter-situation/consulter-solde.jsp?COMPTE_ACTIF='+ \
|
||||||
account._link_id = str(account._link_id)
|
compte_id_re.search(url_to_parse).groups()[0]
|
||||||
|
account._link_id = account._link_id
|
||||||
|
|
||||||
# account.label
|
# account.label
|
||||||
tpl = cpt.xpath("./td[2]/a/text()")[0].split(' ')
|
tpl = cpt.xpath("./td[2]/a/text()")[0].split(' ')
|
||||||
account.label = tpl[0] + u" " + tpl[1]
|
account.label = ' '.join(tpl[:2])
|
||||||
account.label = str(u""+account.label)
|
|
||||||
|
|
||||||
account.raw = str(u""+account.label)
|
|
||||||
|
|
||||||
l.append(account)
|
l.append(account)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,16 +20,25 @@
|
||||||
|
|
||||||
#from logging import error
|
#from logging import error
|
||||||
|
|
||||||
from weboob.tools.browser import BasePage #, BrowserUnavailable
|
from weboob.tools.browser import BasePage, BrowserUnavailable
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['LoginPage']
|
__all__ = ['LoginPage']
|
||||||
|
|
||||||
class LoginPage(BasePage):
|
class LoginPage(BasePage):
|
||||||
def login(self, login, passwd):
|
def login(self, login, passwd):
|
||||||
|
msgb = self.document.xpath(".//*[@id='message_client']/text()")
|
||||||
|
msga = ''.join(msgb)
|
||||||
|
msg = msga.strip("\n")
|
||||||
|
|
||||||
|
if "maintenance" in msg:
|
||||||
|
print "Fortuneo: "+msg
|
||||||
|
raise BrowserUnavailable(msg)
|
||||||
|
|
||||||
self.browser.select_form(nr=3)
|
self.browser.select_form(nr=3)
|
||||||
self.browser['login'] = login
|
self.browser['login'] = login
|
||||||
self.browser['passwd'] = passwd
|
self.browser['passwd'] = passwd
|
||||||
self.browser.submit()
|
self.browser.submit()
|
||||||
|
|
||||||
|
|
||||||
# vim:ts=4:sw=4
|
# vim:ts=4:sw=4
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,3 @@ class FortuneoTest(BackendTest):
|
||||||
a = l[0]
|
a = l[0]
|
||||||
list(self.backend.iter_coming(a))
|
list(self.backend.iter_coming(a))
|
||||||
list(self.backend.iter_history(a))
|
list(self.backend.iter_history(a))
|
||||||
|
|
||||||
# vim:ts=4:sw=4
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue