weboob.tools.browser -> weboob.deprecated.browser weboob.tools.parsers -> weboob.deprecated.browser.parsers weboob.tools.mech -> weboob.deprecated.mech weboob.browser2 -> weboob.browser weboob.core.exceptions -> weboob.exceptions Also, the new tree for browser2 is: weboob.browser: import weboob.browser.browsers.* and weboob.browser.url.* weboob.browser.browsers: all browsers (including PagesBrowser and LoginBrowser) weboob.browser.url: the URL class weboob.browser.profiles: all Profile classes weboob.browser.sessions: WeboobSession and FuturesSession weboob.browser.cookies: that's a cookies thing weboob.browser.pages: all Page and derivated classes, and Form class weboob.browser.exceptions: specific browser exceptions weboob.browser.elements: AbstractElement classes, and 'method' decorator weboob.browser.filters.*: all filters
95 lines
3.2 KiB
Python
95 lines
3.2 KiB
Python
# -*- coding: utf-8 -*-
|
||
|
||
# Copyright(C) 2012 Florent Fourcot
|
||
#
|
||
# This file is part of weboob.
|
||
#
|
||
# weboob is free software: you can redistribute it and/or modify
|
||
# it under the terms of the GNU Affero General Public License as published by
|
||
# the Free Software Foundation, either version 3 of the License, or
|
||
# (at your option) any later version.
|
||
#
|
||
# weboob is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU Affero General Public License for more details.
|
||
#
|
||
# 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 datetime import date
|
||
from weboob.capabilities.library import Book, Renew
|
||
from weboob.deprecated.browser import Page
|
||
from weboob.deprecated.mech import ClientForm
|
||
from weboob.tools.html import html2text
|
||
|
||
|
||
class SkipPage(Page):
|
||
pass
|
||
|
||
|
||
class HomePage(Page):
|
||
def on_loaded(self):
|
||
link = self.document.find('//a[@id="patronRSSFeedLinkComponent"]')
|
||
self.id = link.attrib['href'].split('/')[4]
|
||
|
||
def get_id(self):
|
||
return self.id
|
||
|
||
|
||
def txt2date(s):
|
||
split = s.split('-')
|
||
return date(int(split[2]) + 2000, int(split[1]), int(split[0]))
|
||
|
||
|
||
class RentedPage(Page):
|
||
def get_list(self):
|
||
for tr in self.document.getroot().xpath('//tr[@class="patFuncEntry"]'):
|
||
id = tr.xpath('td/input')[0].attrib["value"]
|
||
book = Book(id)
|
||
bigtitle = tr.xpath('td[@class="patFuncTitle"]/label/a')[0].text
|
||
book.name = bigtitle.split('/')[0]
|
||
book.author = bigtitle.split('/')[1]
|
||
date = tr.xpath('td[@class="patFuncStatus"]')[0].text
|
||
book.date = txt2date(date.replace('RETOUR', ''))
|
||
yield book
|
||
|
||
def renew(self, id):
|
||
# find the good box
|
||
input = self.document.find('//input[@value="%s"]' % id)
|
||
self.browser.select_form("checkout_form")
|
||
self.browser.form.set_all_readonly(False)
|
||
self.browser.controls.append(ClientForm.TextControl('text', input.attrib['name'], {'value': id}))
|
||
self.browser.controls.append(ClientForm.TextControl('text', 'requestRenewSome', {'value': 'requestRenewSome'}))
|
||
self.browser.submit()
|
||
|
||
def confirm_renew(self):
|
||
self.browser.select_form("checkout_form")
|
||
self.browser.form.set_all_readonly(False)
|
||
self.browser.submit(name='renewsome')
|
||
|
||
def read_renew(self, id):
|
||
for tr in self.document.getroot().xpath('//tr[@class="patFuncEntry"]'):
|
||
if len(tr.xpath('td/input[@value="%s"]' % id)) > 0:
|
||
message = self.browser.parser.tostring(tr.xpath('td[@class="patFuncStatus"]')[0])
|
||
renew = Renew(id)
|
||
renew.message = html2text(message).replace('\n', '')
|
||
return renew
|
||
|
||
|
||
class HistoryPage(Page):
|
||
pass
|
||
|
||
|
||
class BookedPage(Page):
|
||
# TODO: book some books...
|
||
pass
|
||
|
||
|
||
class LoginPage(Page):
|
||
def login(self, login, passwd):
|
||
self.browser.select_form(nr=0)
|
||
self.browser.form.set_all_readonly(False)
|
||
self.browser['code'] = login
|
||
self.browser['pin'] = passwd
|
||
self.browser.submit()
|