From 2ec6e10c8eb87a6f4e2a49afd58485adb13702a5 Mon Sep 17 00:00:00 2001 From: Calum Lind Date: Sun, 13 Feb 2022 12:31:41 +0000 Subject: [PATCH] [Lint] Update linter version and fix issues Notable changes: * Prettier >=2.3 with more consistent js assignments * Black now formats docstrings * Added isort to list of autoformaters * Update flake8 config for v4 Ref: https://prettier.io/blog/2021/05/09/2.3.0.html --- .pre-commit-config.yaml | 24 +++++---- deluge/argparserbase.py | 6 +-- deluge/common.py | 46 ++++++++-------- deluge/config.py | 2 +- deluge/core/preferencesmanager.py | 2 +- deluge/core/torrent.py | 2 +- .../AutoAdd/deluge_autoadd/data/autoadd.js | 31 ++++++----- .../deluge_autoadd/data/autoadd_options.js | 5 +- .../plugins/AutoAdd/deluge_autoadd/gtkui.py | 2 +- .../Blocklist/deluge_blocklist/gtkui.py | 2 +- .../plugins/Execute/deluge_execute/gtkui.py | 2 +- .../Extractor/deluge_extractor/gtkui.py | 2 +- .../plugins/Label/deluge_label/data/label.js | 20 +++---- .../Label/deluge_label/gtkui/sidebar_menu.py | 2 +- deluge/plugins/Stats/deluge_stats/graph.py | 2 +- deluge/tests/common.py | 2 +- deluge/tests/test_common.py | 8 +-- deluge/tests/test_files_tab.py | 4 +- deluge/ui/console/cmdline/commands/info.py | 2 +- deluge/ui/console/modes/basemode.py | 2 +- deluge/ui/console/utils/format_utils.py | 4 +- deluge/ui/gtk3/files_tab.py | 2 +- deluge/ui/gtk3/gtkui.py | 4 +- deluge/ui/gtk3/listview.py | 2 +- deluge/ui/gtk3/path_combo_chooser.py | 2 +- deluge/ui/gtk3/piecesbar.py | 6 +-- deluge/ui/gtk3/preferences.py | 3 +- deluge/ui/web/js/deluge-all/AboutWindow.js | 3 +- .../ui/web/js/deluge-all/AddTrackerWindow.js | 3 +- .../ui/web/js/deluge-all/add/OptionsPanel.js | 5 +- .../deluge-all/preferences/BandwidthPage.js | 3 +- .../extjs/ext-extensions/form/SpinnerGroup.js | 5 +- packaging/win/delugewin.spec | 52 ++++++------------- packaging/win/setup_nsis.py | 1 - setup.cfg | 22 ++++---- 35 files changed, 129 insertions(+), 156 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a0f0a5dbe..afe8ef923 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,30 +6,32 @@ exclude: > deluge/tests/data/.*svg| )$ repos: - - repo: https://github.com/ambv/black - rev: 20.8b1 + - repo: https://github.com/psf/black + rev: 22.1.0 hooks: - id: black name: Fmt Black - repo: https://github.com/pre-commit/mirrors-prettier - rev: v2.2.1 + rev: v2.5.1 hooks: - id: prettier name: Fmt Prettier # Workaround to list modified files only. args: [--list-different] - - repo: https://gitlab.com/pycqa/flake8 - # v3.7.9 due to E402 issue: https://gitlab.com/pycqa/flake8/-/issues/638 - rev: 3.7.9 + - repo: https://github.com/pycqa/isort + rev: 5.10.1 + hooks: + - id: isort + name: Fmt isort + - repo: https://github.com/pycqa/flake8 + rev: 4.0.1 hooks: - id: flake8 name: Chk Flake8 additional_dependencies: - - flake8-isort==4.0.0 - - pep8-naming==0.11.1 - args: [--isort-show-traceback] + - pep8-naming==0.12.1 - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v3.4.0 + rev: v4.1.0 hooks: - id: double-quote-string-fixer name: Fix Double-quotes @@ -42,7 +44,7 @@ repos: - id: trailing-whitespace name: Fix Trailing whitespace - repo: https://github.com/asottile/pyupgrade - rev: v2.29.1 + rev: v2.31.0 hooks: - id: pyupgrade args: [--py36-plus] diff --git a/deluge/argparserbase.py b/deluge/argparserbase.py index 45417ee31..5dc433086 100644 --- a/deluge/argparserbase.py +++ b/deluge/argparserbase.py @@ -106,8 +106,8 @@ class DelugeTextHelpFormatter(argparse.RawDescriptionHelpFormatter): line instead. This way list formatting is not mangled by textwrap.wrap. """ wrapped_lines = [] - for l in text.splitlines(): - wrapped_lines.extend(textwrap.wrap(l, width, subsequent_indent=' ')) + for line in text.splitlines(): + wrapped_lines.extend(textwrap.wrap(line, width, subsequent_indent=' ')) return wrapped_lines def _format_action_invocation(self, action): @@ -199,7 +199,7 @@ class ArgParserBase(argparse.ArgumentParser): self.group.add_argument( '-L', '--loglevel', - choices=[l for k in deluge.log.levels for l in (k, k.upper())], + choices=[level for k in deluge.log.levels for level in (k, k.upper())], help=_('Set the log level (none, error, warning, info, debug)'), metavar='', ) diff --git a/deluge/common.py b/deluge/common.py index ad71e3bf5..77573ffd7 100644 --- a/deluge/common.py +++ b/deluge/common.py @@ -436,22 +436,22 @@ def fsize(fsize_b, precision=1, shortform=False): """ - if fsize_b >= 1024 ** 4: + if fsize_b >= 1024**4: return '%.*f %s' % ( precision, - fsize_b / 1024 ** 4, + fsize_b / 1024**4, tib_txt_short if shortform else tib_txt, ) - elif fsize_b >= 1024 ** 3: + elif fsize_b >= 1024**3: return '%.*f %s' % ( precision, - fsize_b / 1024 ** 3, + fsize_b / 1024**3, gib_txt_short if shortform else gib_txt, ) - elif fsize_b >= 1024 ** 2: + elif fsize_b >= 1024**2: return '%.*f %s' % ( precision, - fsize_b / 1024 ** 2, + fsize_b / 1024**2, mib_txt_short if shortform else mib_txt, ) elif fsize_b >= 1024: @@ -503,28 +503,28 @@ def fspeed(bps, precision=1, shortform=False): """ - if bps < 1024 ** 2: + if bps < 1024**2: return '%.*f %s' % ( precision, bps / 1024, _('K/s') if shortform else _('KiB/s'), ) - elif bps < 1024 ** 3: + elif bps < 1024**3: return '%.*f %s' % ( precision, - bps / 1024 ** 2, + bps / 1024**2, _('M/s') if shortform else _('MiB/s'), ) - elif bps < 1024 ** 4: + elif bps < 1024**4: return '%.*f %s' % ( precision, - bps / 1024 ** 3, + bps / 1024**3, _('G/s') if shortform else _('GiB/s'), ) else: return '%.*f %s' % ( precision, - bps / 1024 ** 4, + bps / 1024**4, _('T/s') if shortform else _('TiB/s'), ) @@ -639,17 +639,17 @@ def tokenize(text): size_units = [ {'prefix': 'b', 'divider': 1, 'singular': 'byte', 'plural': 'bytes'}, - {'prefix': 'KiB', 'divider': 1024 ** 1}, - {'prefix': 'MiB', 'divider': 1024 ** 2}, - {'prefix': 'GiB', 'divider': 1024 ** 3}, - {'prefix': 'TiB', 'divider': 1024 ** 4}, - {'prefix': 'PiB', 'divider': 1024 ** 5}, - {'prefix': 'KB', 'divider': 1000 ** 1}, - {'prefix': 'MB', 'divider': 1000 ** 2}, - {'prefix': 'GB', 'divider': 1000 ** 3}, - {'prefix': 'TB', 'divider': 1000 ** 4}, - {'prefix': 'PB', 'divider': 1000 ** 5}, - {'prefix': 'm', 'divider': 1000 ** 2}, + {'prefix': 'KiB', 'divider': 1024**1}, + {'prefix': 'MiB', 'divider': 1024**2}, + {'prefix': 'GiB', 'divider': 1024**3}, + {'prefix': 'TiB', 'divider': 1024**4}, + {'prefix': 'PiB', 'divider': 1024**5}, + {'prefix': 'KB', 'divider': 1000**1}, + {'prefix': 'MB', 'divider': 1000**2}, + {'prefix': 'GB', 'divider': 1000**3}, + {'prefix': 'TB', 'divider': 1000**4}, + {'prefix': 'PB', 'divider': 1000**5}, + {'prefix': 'm', 'divider': 1000**2}, ] diff --git a/deluge/config.py b/deluge/config.py index abf46d71b..c5cb3122b 100644 --- a/deluge/config.py +++ b/deluge/config.py @@ -231,7 +231,7 @@ class Config: self._save_timer = self.callLater(5, self.save) def __getitem__(self, key): - """See get_item """ + """See get_item""" return self.get_item(key) def get_item(self, key): diff --git a/deluge/core/preferencesmanager.py b/deluge/core/preferencesmanager.py index 79e960252..7e5c207a1 100644 --- a/deluge/core/preferencesmanager.py +++ b/deluge/core/preferencesmanager.py @@ -198,7 +198,7 @@ class PreferencesManager(component.Component): self.__set_listen_on() def __set_listen_on(self): - """ Set the ports and interface address to listen for incoming connections on.""" + """Set the ports and interface address to listen for incoming connections on.""" if self.config['random_port']: if not self.config['listen_random_port']: self.config['listen_random_port'] = random.randrange(49152, 65525) diff --git a/deluge/core/torrent.py b/deluge/core/torrent.py index 55e825727..9a4af0b8a 100644 --- a/deluge/core/torrent.py +++ b/deluge/core/torrent.py @@ -576,7 +576,7 @@ class Torrent: trackers (list of dicts): A list of trackers. """ if trackers is None: - self.trackers = [tracker for tracker in self.handle.trackers()] + self.trackers = list(self.handle.trackers()) self.tracker_host = None return diff --git a/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js index ebed40180..e68fce307 100644 --- a/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js +++ b/deluge/plugins/AutoAdd/deluge_autoadd/data/autoadd.js @@ -42,22 +42,21 @@ Deluge.ux.preferences.AutoAddPage = Ext.extend(Ext.Panel, { dataIndex: 'enabled', tpl: new Ext.XTemplate('{enabled:this.getCheckbox}', { getCheckbox: function (checked, selected) { - Deluge.ux.AutoAdd.onClickFunctions[ - selected.id - ] = function () { - if (selected.enabled) { - deluge.client.autoadd.disable_watchdir( - selected.id - ); - checked = false; - } else { - deluge.client.autoadd.enable_watchdir( - selected.id - ); - checked = true; - } - autoAdd.updateWatchDirs(); - }; + Deluge.ux.AutoAdd.onClickFunctions[selected.id] = + function () { + if (selected.enabled) { + deluge.client.autoadd.disable_watchdir( + selected.id + ); + checked = false; + } else { + deluge.client.autoadd.enable_watchdir( + selected.id + ); + checked = true; + } + autoAdd.updateWatchDirs(); + }; return ( 'deluge-torrent.org', + html: 'deluge-torrent.org', }, ]); this.addButton(_('Close'), this.onCloseClick, this); diff --git a/deluge/ui/web/js/deluge-all/AddTrackerWindow.js b/deluge/ui/web/js/deluge-all/AddTrackerWindow.js index 8fbe0b221..aaf4a3ff9 100644 --- a/deluge/ui/web/js/deluge-all/AddTrackerWindow.js +++ b/deluge/ui/web/js/deluge-all/AddTrackerWindow.js @@ -10,7 +10,8 @@ Ext.ns('Deluge'); // Custom VType validator for tracker urls -var trackerUrlTest = /(((^https?)|(^udp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i; +var trackerUrlTest = + /(((^https?)|(^udp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i; Ext.apply(Ext.form.VTypes, { trackerUrl: function (val, field) { return trackerUrlTest.test(val); diff --git a/deluge/ui/web/js/deluge-all/add/OptionsPanel.js b/deluge/ui/web/js/deluge-all/add/OptionsPanel.js index 6b75686a3..365b00190 100644 --- a/deluge/ui/web/js/deluge-all/add/OptionsPanel.js +++ b/deluge/ui/web/js/deluge-all/add/OptionsPanel.js @@ -134,9 +134,8 @@ Deluge.add.OptionsPanel = Ext.extend(Ext.TabPanel, { nodes, function (node) { if (node.attributes.fileindex < 0) return; - var priorities = this.form.optionsManager.get( - 'file_priorities' - ); + var priorities = + this.form.optionsManager.get('file_priorities'); priorities[node.attributes.fileindex] = newValue; this.form.optionsManager.update('file_priorities', priorities); }, diff --git a/deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js b/deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js index 4c3720198..8c32da501 100644 --- a/deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js +++ b/deluge/ui/web/js/deluge-all/preferences/BandwidthPage.js @@ -117,8 +117,7 @@ Deluge.preferences.Bandwidth = Ext.extend(Ext.form.FormPanel, { border: false, title: '', defaultType: 'checkbox', - style: - 'padding-top: 0px; padding-bottom: 5px; margin-top: 0px; margin-bottom: 0px;', + style: 'padding-top: 0px; padding-bottom: 5px; margin-top: 0px; margin-bottom: 0px;', autoHeight: true, }); om.bind( diff --git a/deluge/ui/web/js/extjs/ext-extensions/form/SpinnerGroup.js b/deluge/ui/web/js/extjs/ext-extensions/form/SpinnerGroup.js index 31eca735c..ee761aa6f 100644 --- a/deluge/ui/web/js/extjs/ext-extensions/form/SpinnerGroup.js +++ b/deluge/ui/web/js/extjs/ext-extensions/form/SpinnerGroup.js @@ -80,9 +80,8 @@ Ext.ux.form.SpinnerGroup = Ext.extend(Ext.form.CheckboxGroup, { // Generate the column configs with the correct width setting for (var i = 0; i < numCols; i++) { var cc = Ext.apply({ items: [] }, colCfg); - cc[ - this.columns[i] <= 1 ? 'columnWidth' : 'width' - ] = this.columns[i]; + cc[this.columns[i] <= 1 ? 'columnWidth' : 'width'] = + this.columns[i]; if (this.defaults) { cc.defaults = Ext.apply( cc.defaults || {}, diff --git a/packaging/win/delugewin.spec b/packaging/win/delugewin.spec index ece6db9fe..b6b557365 100644 --- a/packaging/win/delugewin.spec +++ b/packaging/win/delugewin.spec @@ -1,12 +1,15 @@ -# -*- mode: python ; coding: utf-8 -*- +# -*- mode: python -*- import os -import sys -import deluge.common -from PyInstaller.utils.hooks import collect_data_files, collect_submodules, copy_metadata + +from PyInstaller.utils.hooks import ( + collect_data_files, + collect_submodules, + copy_metadata, +) datas = [] binaries = [] -hiddenimports = ['pygame','ifaddr'] +hiddenimports = ['pygame', 'ifaddr'] # Collect Meta Data datas += copy_metadata('deluge', recursive=True) @@ -16,7 +19,8 @@ datas += copy_metadata('service-identity', recursive=True) hiddenimports += collect_submodules('deluge') # Add stdlib as Hidden Imports. -# This is filtered list that excludes some common examples or stuff not useful in plugins (such as tty, mailbox, turtledemo etc.). +# This is filtered list that excludes some common examples or stuff not useful in +# plugins (such as tty, mailbox, turtledemo etc.). # It is safe to assume that 90% of that list would already be included anyway. stdlib = [ 'string', @@ -108,46 +112,22 @@ icon = [src for src, dest in package_data if src.endswith('deluge.ico')][0] # List of executables to produce executables = { - 'deluge-script.pyw': { - 'name': 'deluge', - 'console': False, - 'gtk': True, - }, - 'deluge-gtk-script.pyw': { - 'name': 'deluge-gtk', - 'console': False, - 'gtk': True, - }, - 'deluge-debug-script.py': { - 'name': 'deluge-debug', - 'console': True, - 'gtk': True, - }, + 'deluge-script.pyw': {'name': 'deluge', 'console': False, 'gtk': True}, + 'deluge-gtk-script.pyw': {'name': 'deluge-gtk', 'console': False, 'gtk': True}, + 'deluge-debug-script.py': {'name': 'deluge-debug', 'console': True, 'gtk': True}, 'deluge-console-script.py': { 'name': 'deluge-console', 'console': True, 'gtk': False, }, - 'deluged-script.pyw': { - 'name': 'deluged', - 'console': False, - 'gtk': False, - }, - 'deluged-debug-script.py': { - 'name': 'deluged-debug', - 'console': True, - 'gtk': False, - }, + 'deluged-script.pyw': {'name': 'deluged', 'console': False, 'gtk': False}, + 'deluged-debug-script.py': {'name': 'deluged-debug', 'console': True, 'gtk': False}, 'deluge-web-debug-script.py': { 'name': 'deluge-web-debug', 'console': True, 'gtk': False, }, - 'deluge-web-script.pyw': { - 'name': 'deluge-web', - 'console': False, - 'gtk': False, - }, + 'deluge-web-script.pyw': {'name': 'deluge-web', 'console': False, 'gtk': False}, } analysis = {} diff --git a/packaging/win/setup_nsis.py b/packaging/win/setup_nsis.py index bdd07a9ca..f34a941e1 100644 --- a/packaging/win/setup_nsis.py +++ b/packaging/win/setup_nsis.py @@ -1,5 +1,4 @@ #!/usr/bin/env python -# -*- coding: utf-8 -*- # # Copyright (C) 2012-2015 Calum Lind # Copyright (C) 2010 Damien Churchill diff --git a/setup.cfg b/setup.cfg index b4071f53e..9403fb0cb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,15 +27,19 @@ frameworks = CoreFoundation, Foundation, AppKit [flake8] max-line-length = 120 builtins = _,_n,__request__ -exclude = .git,.tox,.eggs,dist,build -ignore = -# A003 Class attribute is a python builtin. +extend-exclude = dist,build +extend-ignore = +# flake8-builtins: A003 class attribute is shadowing a python builtin A003, -# C813, C815, C816: PY3 missing trailing commas. - C813,C815,C816, -# W503 line break before binary operator. - W503, - E203 - +# E203 whitespace before ':' + E203, +# N818 pep8-naming: error suffix in exception names + N818 +per-file-ignores = +# import not top of file (gi checks required before import) + deluge/ui/gtk3/*.py : E402 + deluge/**/gtkui.py: E402 + deluge/**/gtkui/*.py: E402 + deluge/plugins/Stats/deluge_stats/graph.py: E402 [pycodestyle] max-line-length = 88