diff --git a/modules/poivy/browser.py b/modules/poivy/browser.py index 3fb12b1f..e6977dac 100644 --- a/modules/poivy/browser.py +++ b/modules/poivy/browser.py @@ -17,9 +17,8 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . - from weboob.tools.browser2 import LoginBrowser, URL, need_login -from weboob.tools.browser import BrowserBanned, BrowserIncorrectPassword +from weboob.tools.browser import BrowserIncorrectPassword from .pages import HomePage, LoginPage, HistoryPage, BillsPage, ErrorPage __all__ = ['PoivyBrowser'] @@ -40,8 +39,7 @@ class PoivyBrowser(LoginBrowser): self.login.stay_or_go() - if not self.page.login(self.username, self.password): - raise BrowserBanned('Too many connections from you IP address: captcha enabled') + self.page.login(self.username, self.password) if self.login.is_here() or self.warning.is_here(): raise BrowserIncorrectPassword() diff --git a/modules/poivy/pages.py b/modules/poivy/pages.py index e51c65bf..d4009d45 100644 --- a/modules/poivy/pages.py +++ b/modules/poivy/pages.py @@ -17,6 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . +from weboob.tools.browser import BrowserBanned from weboob.tools.browser2.page import HTMLPage, LoggedPage, method, ListElement, ItemElement from weboob.tools.browser2.filters import Env, CleanText, CleanDecimal, Field, Attr, Filter, Time, Date, Link from weboob.capabilities.bill import Subscription, Detail @@ -35,36 +36,43 @@ class LoginPage(HTMLPage): def login(self, login, password): captcha = self.doc.xpath('//label[@class="label_captcha_input"]') if len(captcha) > 0: - return False + raise BrowserBanned('Too many connections from you IP address: captcha enabled') xpath_hidden = '//form[@id="newsletter_form"]/input[@type="hidden"]' hidden_id = Attr(xpath_hidden, "value")(self.doc) hidden_name = Attr(xpath_hidden, "name")(self.doc) form = self.get_form(xpath="//form[@class='form-detail']") - form['login[username]'] = login.encode('iso-8859-1') - form['login[password]'] = password.encode('iso-8859-1') + form['login[username]'] = login + form['login[password]'] = password form[hidden_name] = hidden_id form.submit() - return True -class Insert2(Filter): +class InsertX(Filter): """ - Insert two Filters inside a string + Insert a list of Filters inside a string """ - def __init__(self, selector, selector2, string): - super(Insert2, self).__init__(selector) + def __init__(self, selectors, string): self.string = string - self.selector2 = selector2 + self.selectors = selectors + + + def map_filter(self, selector, item): + if isinstance(selector, basestring): + value = item.xpath(selector) + elif callable(selector): + value = selector(item) + else: + value = selector + return value def __call__(self, item): - value = self.selector(item) - value2 = self.selector2(item) - return self.filter(value, value2) + myliste = [self.map_filter(selector, item) for selector in self.selectors] + return self.filter(tuple(myliste)) - def filter(self, txt, txt2): - return self.string % (txt, txt2) + def filter(self, mytupple): + return self.string % mytupple class HomePage(LoggedPage, HTMLPage): @@ -78,7 +86,7 @@ class HomePage(LoggedPage, HTMLPage): obj_id = CleanText('//span[@class="welcome-text"]/b') obj__balance = CleanDecimal(CleanText('//span[@class="balance"]'), replace_dots=False) - obj_label = Insert2(Field('id'), Field('_balance'), u"Poivy - %s - %s €") + obj_label = InsertX([Field('id'), Field('_balance')], u"Poivy - %s - %s €") class HistoryPage(LoggedPage, HTMLPage): @@ -102,16 +110,15 @@ class HistoryPage(LoggedPage, HTMLPage): obj_datetime = Env('datetime') obj_price = CleanDecimal('td[7]', replace_dots=False, default=0) obj_currency = u'EUR' - obj_label = Env('label') + obj_label = InsertX([CleanText('td[3]'), CleanText('td[4]'), + CleanText('td[5]'), CleanText('td[6]')], + u"%s from %s to %s - %s") def parse(self, el): - tds = el.xpath('td') - mydate = Date(CleanText('td[1]'))(el) mytime = Time(CleanText('td[2]'))(el) self.env['datetime'] = datetime.combine(mydate, mytime) - self.env['label'] = u"%s from %s to %s - %s" % (tds[2].text, tds[3].text, tds[4].text, tds[5].text) #TODO