Replace Insert2 by InsertX

And remove the encoding of login/password
And move BrowserBanned exception in page
This commit is contained in:
Florent 2014-03-20 16:07:50 +01:00
commit 39ea87fa61
2 changed files with 28 additions and 23 deletions

View file

@ -17,9 +17,8 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
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()

View file

@ -17,6 +17,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
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