From 51e5ec0e6870bf82b5c0aeb5daecd0c33ca8ffab Mon Sep 17 00:00:00 2001 From: Vincent A Date: Sat, 25 Feb 2017 19:54:58 +0100 Subject: [PATCH] import with_metaclass from future or six The syntax for using a metaclass is different in python2 and python3, and there are existing helpers. Add six as a dependency in setup.py. --- setup.py | 1 + weboob/browser/browsers.py | 5 ++--- weboob/browser/elements.py | 6 ++---- weboob/browser/filters/json.py | 6 ++---- weboob/capabilities/base.py | 6 ++---- weboob/tools/compat.py | 9 ++++++++- 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/setup.py b/setup.py index 029cbc472d..1211b9b79b 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 d7de961162..712333db6d 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 496c321487..82ce2cb3d1 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 fc12b78494..803c90cf58 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 c3336a42e2..d435a8a987 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 6b4c1d20b4..25d7769a52 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 -- GitLab