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)