From 541d080c9d2400780f44accf2b65a097c64cb413 Mon Sep 17 00:00:00 2001 From: Laurent Bachelier Date: Sat, 24 Nov 2012 19:46:34 +0100 Subject: [PATCH] Use flake8 if available instead of pyflakes With flake8, we can check for more issues and ignore those who are not real issues. This allowed me to find genuine errors in: - modules/boursorama/pages/account_history.py - modules/ing/pages/login.py - weboob/tools/application/qt/qt.py I left one in weboob/tools/browser/browser.py for the time being. Some PEP8 fixes on other files. --- contrib/hds/export.py | 3 ++- modules/boursorama/pages/account_history.py | 1 - modules/gazelle/pages/torrents.py | 12 ++++++------ modules/ina/pages/video.py | 3 ++- modules/ing/pages/login.py | 5 +++-- modules/kickass/pages.py | 2 +- modules/radiofrance/browser.py | 3 +-- tools/pyflakes.sh | 13 +++++++++---- weboob/applications/masstransit/masstransit.py | 15 ++++++++------- weboob/tools/application/formatters/iformatter.py | 3 +-- weboob/tools/application/qt/qt.py | 3 +-- weboob/tools/browser/firefox_cookies.py | 14 +++++++++----- weboob/tools/config/yamlconfig.py | 4 ++-- weboob/tools/json.py | 2 +- weboob/tools/ordereddict.py | 9 ++++----- weboob/tools/parsers/elementtidyparser.py | 2 +- weboob/tools/parsers/html5libparser.py | 2 +- weboob/tools/parsers/htmlparser.py | 3 ++- 18 files changed, 54 insertions(+), 45 deletions(-) diff --git a/contrib/hds/export.py b/contrib/hds/export.py index 11ec1206..8a5cfc80 100755 --- a/contrib/hds/export.py +++ b/contrib/hds/export.py @@ -21,7 +21,7 @@ try: import sqlite3 as sqlite except ImportError, e: - from pysqlite2 import dbapi2 as sqlite + from pysqlite2 import dbapi2 as sqlite # NOQA from weboob.core import Weboob from weboob.core.modules import ModuleLoadError @@ -30,6 +30,7 @@ import logging level = logging.DEBUG logging.basicConfig(stream=sys.stdout, level=level) + def main(filename): weboob = Weboob() try: diff --git a/modules/boursorama/pages/account_history.py b/modules/boursorama/pages/account_history.py index dfbf3423..d51a6521 100644 --- a/modules/boursorama/pages/account_history.py +++ b/modules/boursorama/pages/account_history.py @@ -23,7 +23,6 @@ from datetime import date import re from weboob.tools.browser import BasePage -from weboob.capabilities.bank import Transaction from weboob.tools.capabilities.bank.transactions import FrenchTransaction diff --git a/modules/gazelle/pages/torrents.py b/modules/gazelle/pages/torrents.py index 65037457..63cb58a6 100644 --- a/modules/gazelle/pages/torrents.py +++ b/modules/gazelle/pages/torrents.py @@ -25,7 +25,7 @@ from logging import warning, debug try: from urlparse import parse_qs except ImportError: - from cgi import parse_qs + from cgi import parse_qs # NOQA from weboob.tools.misc import html2text, get_bytes_size from weboob.capabilities.torrent import Torrent @@ -69,7 +69,7 @@ class TorrentsPage(BasePage): current_group += ' - ' current_group += a.text elif tr.attrib.get('class', '').startswith('group_torrent') or \ - tr.attrib.get('class', '').startswith('torrent'): + tr.attrib.get('class', '').startswith('torrent'): tds = tr.findall('td') title = current_group @@ -100,9 +100,9 @@ class TorrentsPage(BasePage): continue id = '%s.%s' % (params['id'][0], m.group(1)) try: - size, unit = tds[i+3].text.split() + size, unit = tds[i + 3].text.split() except ValueError: - size, unit = tds[i+2].text.split() + size, unit = tds[i + 2].text.split() size = get_bytes_size(float(size.replace(',', '')), unit) seeders = int(tds[-2].text) leechers = int(tds[-1].text) @@ -159,8 +159,8 @@ class TorrentsPage(BasePage): torrent.seeders = int(tds[3].text) torrent.leechers = int(tds[4].text) break - elif not is_table and tr.attrib.get('class', '').startswith('torrent_widget') and \ - tr.attrib.get('class', '').endswith('pad'): + elif not is_table and tr.attrib.get('class', '').startswith('torrent_widget') \ + and tr.attrib.get('class', '').endswith('pad'): url = tr.cssselect('a[title=Download]')[0].attrib['href'] m = self.TORRENTID_REGEXP.match(url) if not m: diff --git a/modules/ina/pages/video.py b/modules/ina/pages/video.py index aa951190..55ab0fb1 100644 --- a/modules/ina/pages/video.py +++ b/modules/ina/pages/video.py @@ -23,7 +23,7 @@ import re try: from urlparse import parse_qs except ImportError: - from cgi import parse_qs + from cgi import parse_qs # NOQA from weboob.capabilities import NotAvailable from weboob.tools.browser import BasePage, BrokenPageError @@ -87,6 +87,7 @@ class BaseVideoPage(BasePage): def get_description(self): raise NotImplementedError() + class VideoPage(BaseVideoPage): URL_REGEXP = re.compile('http://www.ina.fr/(.+)\.html') diff --git a/modules/ing/pages/login.py b/modules/ing/pages/login.py index 530fd393..62aae503 100644 --- a/modules/ing/pages/login.py +++ b/modules/ing/pages/login.py @@ -104,8 +104,9 @@ class LoginPage(BasePage): self.browser.submit(nologin=True) def error(self): - error = self.document.find('//span[@class="error"]') - return error is not None + err = self.document.find('//span[@class="error"]') + return err is not None + class LoginPage2(BasePage): def on_loaded(self): diff --git a/modules/kickass/pages.py b/modules/kickass/pages.py index 34660c63..9e24c655 100644 --- a/modules/kickass/pages.py +++ b/modules/kickass/pages.py @@ -21,7 +21,7 @@ try: from urlparse import parse_qs except ImportError: - from cgi import parse_qs + from cgi import parse_qs # NOQA from urlparse import urlsplit diff --git a/modules/radiofrance/browser.py b/modules/radiofrance/browser.py index 2305889f..35d60c36 100644 --- a/modules/radiofrance/browser.py +++ b/modules/radiofrance/browser.py @@ -29,7 +29,7 @@ import re try: from urlparse import parse_qs except ImportError: - from cgi import parse_qs + from cgi import parse_qs # NOQA __all__ = ['RadioFranceBrowser', 'RadioFranceVideo'] @@ -93,7 +93,6 @@ class ReplayPage(BasePage): return (radio_domain, player_id) - class DataPage(BasePage): def get_current(self): document = self.document diff --git a/tools/pyflakes.sh b/tools/pyflakes.sh index 33af65c0..5340167d 100755 --- a/tools/pyflakes.sh +++ b/tools/pyflakes.sh @@ -1,7 +1,12 @@ -#!/bin/bash +#!/bin/bash -u cd $(dirname $0) cd .. -# grep will return 0 only if it founds something, but our script -# wants to return 0 when it founds nothing! -pyflakes weboob modules contrib scripts/* | grep -v redefinition && exit 1 || exit 0 +if which flake8 >/dev/null 2>&1; then + set -e + flake8 --ignore=E,W *.py weboob modules contrib scripts/* +else + # grep will return 0 only if it founds something, but our script + # wants to return 0 when it founds nothing! + pyflakes *.py weboob modules contrib scripts/* | grep -v redefinition && exit 1 || exit 0 +fi diff --git a/weboob/applications/masstransit/masstransit.py b/weboob/applications/masstransit/masstransit.py index 22c06eaa..35cdaea6 100644 --- a/weboob/applications/masstransit/masstransit.py +++ b/weboob/applications/masstransit/masstransit.py @@ -24,6 +24,7 @@ from logging import warning import gtk + class FakeConic(object): STATUS_CONNECTED = None STATUS_DISCONNECTED = None @@ -37,11 +38,11 @@ except ImportError: else: toolkit = hildon -try : +try: import conic except ImportError: warning("conic is not found") - conic = FakeConic() + conic = FakeConic() # NOQA from logging import debug @@ -70,7 +71,7 @@ class MasstransitHildon(): self.refresh_in_progress = False self.connected = False self.weboob = weboob - try : + try: self.connection = conic.Connection() self.connection.connect("connection-event", self.connect_event) self.connection.set_property("automatic-connection-events", True) @@ -80,7 +81,7 @@ class MasstransitHildon(): horizontal_box = gtk.HBox() self.main_window = toolkit.Window() - try : + try: self.refresh_button = toolkit.Button( gtk.HILDON_SIZE_AUTO_WIDTH | gtk.HILDON_SIZE_FINGER_HEIGHT, hildon.BUTTON_ARRANGEMENT_HORIZONTAL, @@ -223,7 +224,7 @@ class MasstransitHildon(): "the refresh button is clicked" debug("on_refresh_button_clicked") self.refresh_in_progress = True - try : + try: self.connection.request_connection(conic.CONNECT_FLAG_NONE) except AttributeError: if isinstance(conic, FakeConic): @@ -232,7 +233,7 @@ class MasstransitHildon(): raise def check_station_input(self, widget, user_data): - if self.combo_source.get_current_text() is None : + if self.combo_source.get_current_text() is None: self.picker_button_dest.set_sensitive(False) self.refresh_button.set_sensitive(False) self.retour_button.set_sensitive(False) @@ -251,7 +252,7 @@ class MasstransitHildon(): banner.set_timeout(10000) hildon.hildon_gtk_window_set_progress_indicator(self.main_window, 1) self.treestore.clear() - try : + try: source_text = self.combo_source.get_current_text() dest_text = self.combo_dest.get_current_text() except AttributeError: diff --git a/weboob/tools/application/formatters/iformatter.py b/weboob/tools/application/formatters/iformatter.py index 37732d34..cae5612f 100644 --- a/weboob/tools/application/formatters/iformatter.py +++ b/weboob/tools/application/formatters/iformatter.py @@ -30,7 +30,7 @@ try: import tty, termios except ImportError: PROMPT = '--Press return to continue--' - def readch(): + def readch(): # NOQA return sys.stdin.readline() else: PROMPT = '--Press a key to continue--' @@ -163,7 +163,6 @@ class IFormatter(object): self.output(formatted) return formatted - def format_obj(self, obj, alias=None): """ Format an object to be human-readable. diff --git a/weboob/tools/application/qt/qt.py b/weboob/tools/application/qt/qt.py index ee664e07..05bf79fe 100644 --- a/weboob/tools/application/qt/qt.py +++ b/weboob/tools/application/qt/qt.py @@ -26,8 +26,7 @@ from PyQt4.QtCore import QTimer, SIGNAL, QObject, QString, QSize, QVariant, QMut from PyQt4.QtGui import QMainWindow, QApplication, QStyledItemDelegate, \ QStyleOptionViewItemV4, QTextDocument, QStyle, \ QAbstractTextDocumentLayout, QPalette, QMessageBox, \ - QSpinBox, QLineEdit, QComboBox, QCheckBox, QInputDialog, \ - QLineEdit + QSpinBox, QLineEdit, QComboBox, QCheckBox, QInputDialog from weboob.core.ouiboube import Weboob from weboob.core.scheduler import IScheduler diff --git a/weboob/tools/browser/firefox_cookies.py b/weboob/tools/browser/firefox_cookies.py index b7623374..60d70730 100644 --- a/weboob/tools/browser/firefox_cookies.py +++ b/weboob/tools/browser/firefox_cookies.py @@ -21,7 +21,7 @@ try: import sqlite3 as sqlite except ImportError, e: - from pysqlite2 import dbapi2 as sqlite + from pysqlite2 import dbapi2 as sqlite # NOQA from mechanize import CookieJar, Cookie @@ -47,7 +47,8 @@ class FirefoxCookieJar(CookieJar): def load(self): db = self.__connect() - if not db: return + if not db: + return cookies = db.execute("""SELECT host, path, name, value, expiry, lastAccessed, isSecure FROM moz_cookies @@ -83,12 +84,15 @@ class FirefoxCookieJar(CookieJar): def save(self): db = self.__connect() - if not db: return + if not db: + return db.execute("DELETE FROM moz_cookies WHERE host LIKE '%%%s%%'" % self.domain) for cookie in self: - if cookie.secure: secure = 1 - else: secure = 0 + if cookie.secure: + secure = 1 + else: + secure = 0 if cookie.expires is not None: expires = cookie.expires else: diff --git a/weboob/tools/config/yamlconfig.py b/weboob/tools/config/yamlconfig.py index 899176e8..264f172c 100644 --- a/weboob/tools/config/yamlconfig.py +++ b/weboob/tools/config/yamlconfig.py @@ -29,8 +29,8 @@ try: from yaml import CLoader as Loader from yaml import CDumper as Dumper except ImportError: - from yaml import Loader - from yaml import Dumper + from yaml import Loader # NOQA + from yaml import Dumper # NOQA from .iconfig import IConfig, ConfigError diff --git a/weboob/tools/json.py b/weboob/tools/json.py index 91868b15..0ac5af09 100644 --- a/weboob/tools/json.py +++ b/weboob/tools/json.py @@ -27,4 +27,4 @@ try: import simplejson as json except ImportError: # Python 2.6+ has a module similar to simplejson - import json + import json # NOQA diff --git a/weboob/tools/ordereddict.py b/weboob/tools/ordereddict.py index ece8ad41..a8628e1a 100644 --- a/weboob/tools/ordereddict.py +++ b/weboob/tools/ordereddict.py @@ -22,16 +22,15 @@ try: from collections import OrderedDict except ImportError: try: - from simplejson import OrderedDict + from simplejson import OrderedDict # NOQA except ImportError: try: - from ordereddict import OrderedDict + from ordereddict import OrderedDict # NOQA except ImportError: ## {{{ http://code.activestate.com/recipes/576693/ (r6) from UserDict import DictMixin - class OrderedDict(dict, DictMixin): - + class OrderedDict(dict, DictMixin): # NOQA def __init__(self, *args, **kwds): if len(args) > 1: raise TypeError('expected at most 1 arguments, got %d' % len(args)) @@ -123,7 +122,7 @@ except ImportError: def __eq__(self, other): if isinstance(other, OrderedDict): - return len(self)==len(other) and self.items() == other.items() + return len(self) == len(other) and self.items() == other.items() return dict.__eq__(self, other) def __ne__(self, other): diff --git a/weboob/tools/parsers/elementtidyparser.py b/weboob/tools/parsers/elementtidyparser.py index 162ae237..881a131a 100644 --- a/weboob/tools/parsers/elementtidyparser.py +++ b/weboob/tools/parsers/elementtidyparser.py @@ -30,7 +30,7 @@ from elementtidy import TidyHTMLTreeBuilder try: from xml.etree import cElementTree as ElementTree except ImportError: - from xml.etree import ElementTree + from xml.etree import ElementTree # NOQA from .iparser import IParser diff --git a/weboob/tools/parsers/html5libparser.py b/weboob/tools/parsers/html5libparser.py index ec9e3fe6..def70eb3 100644 --- a/weboob/tools/parsers/html5libparser.py +++ b/weboob/tools/parsers/html5libparser.py @@ -22,7 +22,7 @@ from html5lib import treebuilders, HTMLParser try: from xml.etree import cElementTree as ElementTree except ImportError: - from xml.etree import ElementTree + from xml.etree import ElementTree # NOQA from .iparser import IParser diff --git a/weboob/tools/parsers/htmlparser.py b/weboob/tools/parsers/htmlparser.py index edf2536e..c1ab3d76 100644 --- a/weboob/tools/parsers/htmlparser.py +++ b/weboob/tools/parsers/htmlparser.py @@ -23,7 +23,7 @@ import htmlentitydefs try: from xml.etree import cElementTree as ElementTree except ImportError: - from xml.etree import ElementTree + from xml.etree import ElementTree # NOQA from .iparser import IParser @@ -68,6 +68,7 @@ class HTMLTreeBuilder(_HTMLParser): except: pass + class HTMLParser(IParser): def parse(self, data, encoding=None): parser = HTMLTreeBuilder(encoding)