rename things related to browsers

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
This commit is contained in:
Romain Bignon 2014-10-07 00:23:18 +02:00
commit d61e15cf84
396 changed files with 1442 additions and 1382 deletions

View file

@ -38,7 +38,7 @@ from mechanize import _headersutil as headersutil
from mechanize._html import EncodingFinder from mechanize._html import EncodingFinder
from weboob.core import Weboob from weboob.core import Weboob
from weboob.tools.browser import StandardBrowser, BrowserUnavailable from weboob.deprecated.browser import StandardBrowser, BrowserUnavailable
from weboob.tools.misc import get_backtrace from weboob.tools.misc import get_backtrace
from weboob.tools.misc import to_unicode from weboob.tools.misc import to_unicode
from weboob.tools.storage import StandardStorage from weboob.tools.storage import StandardStorage

View file

@ -65,7 +65,7 @@ In a module directory, there are commonly these files:
* **__init__.py** - needed in every python modules, it exports your :class:`Module <weboob.tools.backend.Module>` class. * **__init__.py** - needed in every python modules, it exports your :class:`Module <weboob.tools.backend.Module>` class.
* **module.py** - defines the main class of your module, which derives :class:`Module <weboob.tools.backend.Module>`. * **module.py** - defines the main class of your module, which derives :class:`Module <weboob.tools.backend.Module>`.
* **browser.py** - your browser, derived from :class:`Browser <weboob.browser2.browser.Browser>`, is called by your module to interact with the supported website. * **browser.py** - your browser, derived from :class:`Browser <weboob.browser.browsers.Browser>`, is called by your module to interact with the supported website.
* **pages.py** - all website's pages handled by the browser are defined here * **pages.py** - all website's pages handled by the browser are defined here
* **test.py** - functional tests * **test.py** - functional tests
* **favicon.png** - a 64x64 transparent PNG icon * **favicon.png** - a 64x64 transparent PNG icon
@ -179,14 +179,14 @@ what are expected returned objects, and what exceptions it may raises.
Browser Browser
******* *******
Most of modules use a class derived from :class:`PagesBrowser <weboob.browser2.page.PagesBrowser>` or Most of modules use a class derived from :class:`PagesBrowser <weboob.browser.browsers.PagesBrowser>` or
:class:`LoginBrowser <weboob.browser2.page.LoginBrowser>` (for authenticated websites) to interact with a website. :class:`LoginBrowser <weboob.browser.browsers.LoginBrowser>` (for authenticated websites) to interact with a website.
Edit ``browser.py``:: Edit ``browser.py``::
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from weboob.browser2 import PagesBrowser from weboob.browser import PagesBrowser
__all__ = ['ExampleBrowser'] __all__ = ['ExampleBrowser']
@ -195,7 +195,7 @@ Edit ``browser.py``::
There are several possible class attributes: There are several possible class attributes:
* **BASEURL** - base url of website used for absolute paths given to :class:`open() <weboob.browser2.page.PagesBrowser.open>` or :class:`location() <weboob.browser2.page.PagesBrowser.location>` * **BASEURL** - base url of website used for absolute paths given to :class:`open() <weboob.browser.browsers.PagesBrowser.open>` or :class:`location() <weboob.browser.browsers.PagesBrowser.location>`
* **PROFILE** - defines the behavior of your browser against the website. By default this is Firefox, but you can import other profiles * **PROFILE** - defines the behavior of your browser against the website. By default this is Firefox, but you can import other profiles
* **TIMEOUT** - defines the timeout for requests (defaults to 10 seconds) * **TIMEOUT** - defines the timeout for requests (defaults to 10 seconds)
* **VERIFY** - SSL verification (if the protocol used is **https**) * **VERIFY** - SSL verification (if the protocol used is **https**)
@ -205,15 +205,16 @@ Pages
For each page you want to handle, you have to create an associated class derived from one of these classes: For each page you want to handle, you have to create an associated class derived from one of these classes:
* :class:`HTMLPage <weboob.browser2.page.HTMLPage>` - a HTML page * :class:`HTMLPage <weboob.browser.pages.HTMLPage>` - a HTML page
* :class:`XMLPage <weboob.browser2.page.XMLPage>` - a XML document * :class:`XMLPage <weboob.browser.pages.XMLPage>` - a XML document
* :class:`JsonPage <weboob.browser2.page.JsonPage>` - a Json object * :class:`JsonPage <weboob.browser.pages.JsonPage>` - a Json object
* :class:`CsvPage <weboob.browser.pages.CsvPage>` - a CSV table
In the file ``pages.py``, you can write, for example:: In the file ``pages.py``, you can write, for example::
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from weboob.browser2.page import HTMLPage from weboob.browser.pages import HTMLPage
__all__ = ['IndexPage', 'ListPage'] __all__ = ['IndexPage', 'ListPage']
@ -227,9 +228,9 @@ In the file ``pages.py``, you can write, for example::
``IndexPage`` is the class we will use to get information from the home page of the website, and ``ListPage`` will handle pages ``IndexPage`` is the class we will use to get information from the home page of the website, and ``ListPage`` will handle pages
which list accounts. which list accounts.
Then, you have to declare them in your browser, with the :class:`URL <weboob.browser2.page.URL>` object:: Then, you have to declare them in your browser, with the :class:`URL <weboob.browser.url.URL>` object::
from weboob.browser2.page import PagesBrowser, URL from weboob.browser import PagesBrowser, URL
from .pages import IndexPage, ListPage from .pages import IndexPage, ListPage
# ... # ...
@ -257,9 +258,9 @@ For example, we can now implement some methods in ``ExampleBrowser``::
return self.page.iter_accounts() return self.page.iter_accounts()
When calling the :func:`go() <weboob.browser2.page.URL.go>` method, it reads the first regexp url of our :class:`URL <weboob.browser2.page.URL>` object, and go on the page. When calling the :func:`go() <weboob.browser.url.URL.go>` method, it reads the first regexp url of our :class:`URL <weboob.browser.url.URL>` object, and go on the page.
:func:`stay_or_go() <weboob.browser2.page.URL.stay_or_go>` is used when you want to relocate on the page only if we aren't already on it. :func:`stay_or_go() <weboob.browser.url.URL.stay_or_go>` is used when you want to relocate on the page only if we aren't already on it.
Once we are on the ``ListPage``, we can call every methods of the ``page`` object. Once we are on the ``ListPage``, we can call every methods of the ``page`` object.
@ -295,8 +296,8 @@ the method :func:`create_default_browser <weboob.tools.backend.Module.create_def
def create_default_browser(self): def create_default_browser(self):
return self.create_browser(self.config['username'].get(), self.config['password'].get()) return self.create_browser(self.config['username'].get(), self.config['password'].get())
On the browser side, you need to inherit from :func:`LoginBrowser <weboob.browser2.page.LoginBrowser>` and to implement the function On the browser side, you need to inherit from :func:`LoginBrowser <weboob.browser.browsers.LoginBrowser>` and to implement the function
:func:`do_login <weboob.browser2.page.LoginBrowser.do_login>`:: :func:`do_login <weboob.browser.browsers.LoginBrowser.do_login>`::
class ExampleBrowser(LoginBrowser): class ExampleBrowser(LoginBrowser):
login = URL('/login', LoginPage) login = URL('/login', LoginPage)
@ -319,7 +320,7 @@ Also, your ``LoginPage`` may look like::
form['password'] = password form['password'] = password
form.submit() form.submit()
Then, each method on your browser which need your user to be authenticated may be decorated by :func:`need_login <weboob.browser2.page.need_login>`:: Then, each method on your browser which need your user to be authenticated may be decorated by :func:`need_login <weboob.browser.browsers.need_login>`::
class ExampleBrowser(LoginBrowser): class ExampleBrowser(LoginBrowser):
accounts = URL('/accounts$', ListPage) accounts = URL('/accounts$', ListPage)
@ -329,9 +330,9 @@ Then, each method on your browser which need your user to be authenticated may b
self.accounts.stay_or_go() self.accounts.stay_or_go()
return self.page.get_accounts() return self.page.get_accounts()
The last thing to know is that :func:`need_login <weboob.browser2.page.need_login>` checks if the current page is a logged one by The last thing to know is that :func:`need_login <weboob.browser.browsers.need_login>` checks if the current page is a logged one by
reading the attribute :func:`logged <weboob.browser2.page.Page.logged>` of the instance. You can either define it yourself, as a reading the attribute :func:`logged <weboob.browser.pages.Page.logged>` of the instance. You can either define it yourself, as a
class boolean attribute or as a property, or to inherit your class from :class:`LoggedPage <weboob.browser2.page.LoggedPage>`. class boolean attribute or as a property, or to inherit your class from :class:`LoggedPage <weboob.browser.pages.LoggedPage>`.
Parsing of pages Parsing of pages
@ -342,7 +343,7 @@ Parsing of pages
When your browser locates on a page, an instance of the class related to the When your browser locates on a page, an instance of the class related to the
:class:`URL <weboob.browser2.page.URL>` attribute which matches the url :class:`URL <weboob.browser.url.URL>` attribute which matches the url
is created. You can declare methods on your class to allow your browser to is created. You can declare methods on your class to allow your browser to
interact with it. interact with it.

View file

@ -18,7 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser import Browser, BrowserHTTPNotFound from weboob.deprecated.browser import Browser, BrowserHTTPNotFound
from .pages import RecipePage, ResultsPage from .pages import RecipePage, ResultsPage

View file

@ -20,7 +20,7 @@
from weboob.capabilities.recipe import Recipe, Comment from weboob.capabilities.recipe import Recipe, Comment
from weboob.capabilities.base import NotAvailable, NotLoaded from weboob.capabilities.base import NotAvailable, NotLoaded
from weboob.tools.browser import Page from weboob.deprecated.browser import Page
class ResultsPage(Page): class ResultsPage(Page):

View file

@ -17,8 +17,8 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser.decorators import id2url from weboob.deprecated.browser.decorators import id2url
from weboob.tools.browser import Browser from weboob.deprecated.browser import Browser
from .job import AdeccoJobAdvert from .job import AdeccoJobAdvert
from .pages import SearchPage, AdvertPage from .pages import SearchPage, AdvertPage
import urllib import urllib

View file

@ -18,7 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser import Page from weboob.deprecated.browser import Page
from weboob.tools.html import html2text from weboob.tools.html import html2text
from .job import AdeccoJobAdvert from .job import AdeccoJobAdvert
import datetime import datetime

View file

@ -18,7 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.browser2 import PagesBrowser, URL from weboob.browser import PagesBrowser, URL
from .pages import EventListPage, EventPage from .pages import EventListPage, EventPage
from datetime import timedelta, date from datetime import timedelta, date

View file

@ -17,10 +17,10 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.browser2.page import HTMLPage, method, pagination from weboob.browser.pages import HTMLPage, pagination
from weboob.browser2.elements import ItemElement, ListElement from weboob.browser.elements import ItemElement, ListElement, method
from weboob.browser2.filters.standard import Regexp, CleanText, DateTime, Filter, Type, Env, Format, CombineDate from weboob.browser.filters.standard import Regexp, CleanText, DateTime, Filter, Type, Env, Format, CombineDate
from weboob.browser2.filters.html import Link, XPath, CleanHTML from weboob.browser.filters.html import Link, XPath, CleanHTML
from .calendar import AgendaDuLibreCalendarEvent from .calendar import AgendaDuLibreCalendarEvent
from datetime import time, datetime, date from datetime import time, datetime, date

View file

@ -20,7 +20,7 @@
from weboob.capabilities.base import NotAvailable, NotLoaded from weboob.capabilities.base import NotAvailable, NotLoaded
from weboob.capabilities.cinema import Movie, Person from weboob.capabilities.cinema import Movie, Person
from weboob.tools.browser import Browser from weboob.deprecated.browser import Browser
from weboob.tools.json import json from weboob.tools.json import json
import base64 import base64
import hashlib import hashlib

View file

@ -18,8 +18,8 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.browser2 import LoginBrowser, URL, need_login from weboob.browser import LoginBrowser, URL, need_login
from weboob.core.exceptions import BrowserIncorrectPassword from weboob.exceptions import BrowserIncorrectPassword
from .pages import LoginPage, AccountsPage from .pages import LoginPage, AccountsPage

View file

@ -21,9 +21,9 @@
import datetime import datetime
from decimal import Decimal from decimal import Decimal
from weboob.browser2.page import HTMLPage, LoggedPage, method from weboob.browser.pages import HTMLPage, LoggedPage
from weboob.browser2.elements import ItemElement from weboob.browser.elements import ItemElement, method
from weboob.browser2.filters.standard import CleanDecimal, CleanText, Filter, TableCell from weboob.browser.filters.standard import CleanDecimal, CleanText, Filter, TableCell
from weboob.capabilities.bank import Account from weboob.capabilities.bank import Account
from weboob.tools.capabilities.bank.transactions import FrenchTransaction as Transaction from weboob.tools.capabilities.bank.transactions import FrenchTransaction as Transaction

View file

@ -18,7 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser import Browser, BrowserHTTPNotFound from weboob.deprecated.browser import Browser, BrowserHTTPNotFound
from .pages import RecipePage, ResultsPage, FourOFourPage from .pages import RecipePage, ResultsPage, FourOFourPage

View file

@ -20,7 +20,7 @@
from weboob.capabilities.recipe import Recipe from weboob.capabilities.recipe import Recipe
from weboob.capabilities.base import NotAvailable, NotLoaded from weboob.capabilities.base import NotAvailable, NotLoaded
from weboob.tools.browser import Page from weboob.deprecated.browser import Page
class FourOFourPage(Page): class FourOFourPage(Page):

View file

@ -17,7 +17,7 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser import Browser, BrowserIncorrectPassword from weboob.deprecated.browser import Browser, BrowserIncorrectPassword
from weboob.capabilities.bill import Detail from weboob.capabilities.bill import Detail
from decimal import Decimal from decimal import Decimal
from .pages import LoginPage, HomePage, AccountPage, LastPaymentsPage, PaymentDetailsPage, BillsPage from .pages import LoginPage, HomePage, AccountPage, LastPaymentsPage, PaymentDetailsPage, BillsPage

View file

@ -22,7 +22,7 @@ from datetime import datetime
import re import re
import urllib import urllib
from decimal import Decimal from decimal import Decimal
from weboob.tools.browser import Page, BrokenPageError from weboob.deprecated.browser import Page, BrokenPageError
from weboob.capabilities.bill import Subscription, Detail, Bill from weboob.capabilities.bill import Subscription, Detail, Bill

View file

@ -18,7 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
import urllib import urllib
from weboob.tools.browser import Browser, BrowserIncorrectPassword from weboob.deprecated.browser import Browser, BrowserIncorrectPassword
from weboob.capabilities.bill import Detail from weboob.capabilities.bill import Detail
from decimal import Decimal from decimal import Decimal
from .pages import LoginPage, HomePage, AccountPage, HistoryPage, BillsPage from .pages import LoginPage, HomePage, AccountPage, HistoryPage, BillsPage

View file

@ -22,7 +22,7 @@ from datetime import datetime
from decimal import Decimal from decimal import Decimal
import re import re
import urllib import urllib
from weboob.tools.browser import Page from weboob.deprecated.browser import Page
from weboob.capabilities.bill import Subscription, Detail, Bill from weboob.capabilities.bill import Subscription, Detail, Bill

View file

@ -20,7 +20,7 @@
from urlparse import urlsplit, parse_qsl from urlparse import urlsplit, parse_qsl
from weboob.tools.browser import Browser, BrowserIncorrectPassword from weboob.deprecated.browser import Browser, BrowserIncorrectPassword
from .pages import LoginPage, AccountsPage, TransactionsPage from .pages import LoginPage, AccountsPage, TransactionsPage

View file

@ -22,7 +22,7 @@ import datetime
from decimal import Decimal from decimal import Decimal
import re import re
from weboob.tools.browser import Page, BrokenPageError from weboob.deprecated.browser import Page, BrokenPageError
from weboob.capabilities.bank import Account from weboob.capabilities.bank import Account
from weboob.capabilities import NotAvailable from weboob.capabilities import NotAvailable
from weboob.tools.capabilities.bank.transactions import FrenchTransaction as Transaction from weboob.tools.capabilities.bank.transactions import FrenchTransaction as Transaction

View file

@ -17,8 +17,8 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from weboob.tools.browser.decorators import id2url from weboob.deprecated.browser.decorators import id2url
from weboob.tools.browser import Browser from weboob.deprecated.browser import Browser
import urllib import urllib
from .pages import SearchPage, AdvertPage from .pages import SearchPage, AdvertPage
from .job import ApecJobAdvert from .job import ApecJobAdvert

Some files were not shown because too many files have changed in this diff Show more