diff --git a/setup.py b/setup.py index 029cbc472d9429be1e1d45d56d03504817b1dde1..1211b9b79b89c6b63d9cee2d5d7a1ebc6e43ca7c 100755 --- a/setup.py +++ b/setup.py @@ -132,6 +132,7 @@ def install_weboob(): 'requests>=2.0.0', 'python-dateutil', 'PyYAML', + 'six', ] try: import Image diff --git a/weboob/browser/browsers.py b/weboob/browser/browsers.py index d7de961162a46f2136fbf1d726f8193d917823d0..712333db6d41bab0ff21148e31c09cb87a077922 100644 --- a/weboob/browser/browsers.py +++ b/weboob/browser/browsers.py @@ -51,7 +51,7 @@ from weboob.exceptions import BrowserHTTPSDowngrade, ModuleInstallError from weboob.tools.log import getLogger -from weboob.tools.compat import basestring, unicode +from weboob.tools.compat import basestring, unicode, with_metaclass from weboob.tools.json import json from .cookies import WeboobCookieJar @@ -614,7 +614,7 @@ def __new__(mcs, name, bases, attrs): return new_class -class PagesBrowser(DomainBrowser): +class PagesBrowser(with_metaclass(_PagesBrowserMeta, DomainBrowser)): r""" A browser which works pages and keep state of navigation. @@ -643,7 +643,6 @@ class PagesBrowser(DomainBrowser): _urls = None - __metaclass__ = _PagesBrowserMeta def __getattr__(self, name): if self._urls is not None and name in self._urls: diff --git a/weboob/browser/elements.py b/weboob/browser/elements.py index 496c3214873db399b001f46b2933fbfa12b48c41..82ce2cb3d140f4050bb963b9ff876728a1976900 100644 --- a/weboob/browser/elements.py +++ b/weboob/browser/elements.py @@ -28,7 +28,7 @@ import lxml.html from weboob.tools.log import getLogger, DEBUG_FILTERS -from weboob.tools.compat import basestring, unicode +from weboob.tools.compat import basestring, unicode, with_metaclass from weboob.browser.pages import NextPage from .filters.standard import _Filter, CleanText @@ -229,9 +229,7 @@ def __new__(mcs, name, bases, attrs): return new_class -class ItemElement(AbstractElement): - __metaclass__ = _ItemElementMeta - +class ItemElement(with_metaclass(_ItemElementMeta, AbstractElement)): _attrs = None _loaders = None klass = None diff --git a/weboob/browser/filters/json.py b/weboob/browser/filters/json.py index fc12b78494a07dc7cb8163fe1f77051065032f9d..803c90cf58dc81bc9751167c608b6425b670a67f 100644 --- a/weboob/browser/filters/json.py +++ b/weboob/browser/filters/json.py @@ -17,7 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.compat import basestring +from weboob.tools.compat import basestring, with_metaclass from .standard import _Filter, _NO_DEFAULT, Filter, ParseError @@ -36,9 +36,7 @@ def __getitem__(cls, name): return cls(name) -class Dict(Filter): - __metaclass__ = _DictMeta - +class Dict(with_metaclass(_DictMeta, Filter)): def __init__(self, selector=None, default=_NO_DEFAULT): super(Dict, self).__init__(self, default=default) if selector is None: diff --git a/weboob/capabilities/base.py b/weboob/capabilities/base.py index c3336a42e2f1681eef8c13639cdf6858faa15c97..d435a8a9872b7488ab94b324871fb87135f3cf4a 100644 --- a/weboob/capabilities/base.py +++ b/weboob/capabilities/base.py @@ -23,7 +23,7 @@ from decimal import Decimal from copy import deepcopy, copy -from weboob.tools.compat import unicode, long +from weboob.tools.compat import unicode, long, with_metaclass from weboob.tools.misc import to_unicode @@ -316,7 +316,7 @@ def __new__(cls, name, bases, attrs): return new_class -class BaseObject(object): +class BaseObject(with_metaclass(_BaseObjectMeta, object)): """ This is the base class for a capability object. @@ -340,8 +340,6 @@ class Transfer(BaseObject): The docstring is mandatory. """ - __metaclass__ = _BaseObjectMeta - id = None backend = None url = StringField('url') diff --git a/weboob/tools/compat.py b/weboob/tools/compat.py index 6b4c1d20b4bc0b9b4cd252bfcf3641569d969e8e..25d7769a5274f5a185942fcc5c992b7b73b57f50 100644 --- a/weboob/tools/compat.py +++ b/weboob/tools/compat.py @@ -18,7 +18,8 @@ # along with weboob. If not, see . -__all__ = ['unicode', 'long', 'basestring', 'check_output', 'range'] +__all__ = ['unicode', 'long', 'basestring', 'check_output', 'range', + 'with_metaclass'] try: @@ -44,3 +45,9 @@ from subprocess import check_output + + +try: + from future.utils import with_metaclass +except ImportError: + from six import with_metaclass