diff --git a/deluge/__rpcapi.py b/deluge/__rpcapi.py index 26bb9cc34..cc6364cc8 100644 --- a/deluge/__rpcapi.py +++ b/deluge/__rpcapi.py @@ -10,7 +10,7 @@ def scan_for_methods(obj): '__doc__': 'Methods available in %s' % obj.__name__.lower() } for d in dir(obj): - if not hasattr(getattr(obj,d), '_rpcserver_export'): + if not hasattr(getattr(obj, d), '_rpcserver_export'): continue methods[d] = getattr(obj, d) cobj = classobj(obj.__name__.lower(), (object,), methods) diff --git a/deluge/plugins/Label/deluge/plugins/label/core.py b/deluge/plugins/Label/deluge/plugins/label/core.py index 8f7051c7b..02c8796cc 100644 --- a/deluge/plugins/Label/deluge/plugins/label/core.py +++ b/deluge/plugins/Label/deluge/plugins/label/core.py @@ -51,14 +51,14 @@ log = logging.getLogger(__name__) RE_VALID = re.compile("[a-z0-9_\-\.]*\Z") -KNOWN_STATES = ['Downloading','Seeding','Paused','Checking','Queued','Error'] +KNOWN_STATES = ['Downloading', 'Seeding', 'Paused', 'Checking', 'Queued', 'Error'] STATE = "state" TRACKER = "tracker" KEYWORD = "keyword" LABEL = "label" CONFIG_DEFAULTS = { - "torrent_labels":{}, #torrent_id:label_id - "labels":{}, #label_id:{name:value} + "torrent_labels": {}, #torrent_id:label_id + "labels": {}, #label_id:{name:value} } CORE_OPTIONS = ["auto_add_trackers"] @@ -157,7 +157,7 @@ class Core(CorePluginBase): """remove invalid data from config-file""" for torrent_id, label_id in list(self.torrent_labels.iteritems()): if (not label_id in self.labels) or (not torrent_id in self.torrents): - log.debug("label: rm %s:%s" % (torrent_id,label_id)) + log.debug("label: rm %s:%s" % (torrent_id, label_id)) del self.torrent_labels[torrent_id] def clean_initial_config(self): @@ -191,9 +191,9 @@ class Core(CorePluginBase): see label_set_options for more options. """ label_id = label_id.lower() - CheckInput(RE_VALID.match(label_id) , _("Invalid label, valid characters:[a-z0-9_-]")) + CheckInput(RE_VALID.match(label_id), _("Invalid label, valid characters:[a-z0-9_-]")) CheckInput(label_id, _("Empty Label")) - CheckInput(not (label_id in self.labels) , _("Label already exists")) + CheckInput(not (label_id in self.labels), _("Label already exists")) self.labels[label_id] = dict(OPTIONS_DEFAULTS) self.config.save() @@ -259,7 +259,7 @@ class Core(CorePluginBase): } ) - def _has_auto_match(self, torrent ,label_options): + def _has_auto_match(self, torrent, label_options): """match for auto_add fields""" for tracker_match in label_options["auto_add_trackers"]: for tracker in torrent.trackers: @@ -281,7 +281,7 @@ class Core(CorePluginBase): "move_completed_to":string() or None } """ - CheckInput(label_id in self.labels , _("Unknown Label")) + CheckInput(label_id in self.labels, _("Unknown Label")) for key in options_dict.keys(): if not key in OPTIONS_DEFAULTS: raise Exception("label: Invalid options_dict key:%s" % key) @@ -289,16 +289,16 @@ class Core(CorePluginBase): self.labels[label_id].update(options_dict) #apply - for torrent_id,label in self.torrent_labels.iteritems(): + for torrent_id, label in self.torrent_labels.iteritems(): if label_id == label and torrent_id in self.torrents: - self._set_torrent_options(torrent_id , label_id) + self._set_torrent_options(torrent_id, label_id) #auto add options = self.labels[label_id] if options["auto_add"]: for torrent_id, torrent in self.torrents.iteritems(): if self._has_auto_match(torrent, options): - self.set_torrent(torrent_id , label_id) + self.set_torrent(torrent_id, label_id) self.config.save() @@ -308,7 +308,7 @@ class Core(CorePluginBase): return self.labels[label_id] @export - def set_torrent(self, torrent_id , label_id): + def set_torrent(self, torrent_id, label_id): """ assign a label to a torrent removes a label if the label_id parameter is empty. @@ -316,8 +316,8 @@ class Core(CorePluginBase): if label_id == NO_LABEL: label_id = None - CheckInput((not label_id) or (label_id in self.labels) , _("Unknown Label")) - CheckInput(torrent_id in self.torrents , _("Unknown Torrent")) + CheckInput((not label_id) or (label_id in self.labels), _("Unknown Label")) + CheckInput(torrent_id in self.torrents, _("Unknown Torrent")) if torrent_id in self.torrent_labels: self._unset_torrent_options(torrent_id, self.torrent_labels[torrent_id]) diff --git a/deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py b/deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py index 2d06af179..c7b8375c7 100644 --- a/deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py +++ b/deluge/plugins/Label/deluge/plugins/label/gtkui/sidebar_menu.py @@ -79,16 +79,16 @@ class LabelSidebarMenu(object): self.menu.connect("show", self.on_show, None) - def _add_item(self, id, label ,stock): + def _add_item(self, id, label, stock): """I hate glade. id is automatically-added as self.item_ """ - func = getattr(self,"on_%s" % id) + func = getattr(self, "on_%s" % id) item = gtk.ImageMenuItem(stock) item.get_children()[0].set_label(label) item.connect("activate", func) self.menu.prepend(item) - setattr(self,"item_%s" % id, item) + setattr(self, "item_%s" % id, item) self.items.append(item) return item @@ -145,8 +145,8 @@ class AddDialog(object): self.dialog.set_transient_for(component.get("MainWindow").window) self.glade.signal_autoconnect({ - "on_add_ok":self.on_ok, - "on_add_cancel":self.on_cancel, + "on_add_ok": self.on_ok, + "on_add_cancel": self.on_cancel, }) self.dialog.run() @@ -184,8 +184,8 @@ class OptionsDialog(object): self.dialog = self.glade.get_widget("dlg_label_options") self.dialog.set_transient_for(component.get("MainWindow").window) self.glade.signal_autoconnect({ - "on_options_ok":self.on_ok, - "on_options_cancel":self.on_cancel, + "on_options_ok": self.on_ok, + "on_options_cancel": self.on_cancel, }) # Show the label name in the header label @@ -193,7 +193,7 @@ class OptionsDialog(object): for chk_id, group in self.sensitive_groups: chk = self.glade.get_widget(chk_id) - chk.connect("toggled",self.apply_sensitivity) + chk.connect("toggled", self.apply_sensitivity) client.label.get_options(self.label).addCallback(self.load_options) @@ -245,7 +245,7 @@ class OptionsDialog(object): self.dialog.destroy() def apply_sensitivity(self, event=None): - for chk_id , sensitive_list in self.sensitive_groups: + for chk_id, sensitive_list in self.sensitive_groups: chk = self.glade.get_widget(chk_id) sens = chk.get_active() and chk.get_property("sensitive") for widget_id in sensitive_list: diff --git a/deluge/plugins/Label/deluge/plugins/label/gtkui/submenu.py b/deluge/plugins/Label/deluge/plugins/label/gtkui/submenu.py index a0d52899c..cb08c7f95 100644 --- a/deluge/plugins/Label/deluge/plugins/label/gtkui/submenu.py +++ b/deluge/plugins/Label/deluge/plugins/label/gtkui/submenu.py @@ -74,12 +74,12 @@ class LabelMenu(gtk.MenuItem): if label == NO_LABEL: item = gtk.MenuItem(_(NO_LABEL)) else: - item = gtk.MenuItem(label.replace("_","__")) + item = gtk.MenuItem(label.replace("_", "__")) item.connect("activate", self.on_select_label, label) self.sub_menu.append(item) self.show_all() def on_select_label(self, widget=None, label_id=None): - log.debug("select label:%s,%s" % (label_id ,self.get_torrent_ids()) ) + log.debug("select label:%s,%s" % (label_id, self.get_torrent_ids()) ) for torrent_id in self.get_torrent_ids(): client.label.set_torrent(torrent_id, label_id) diff --git a/deluge/plugins/Label/deluge/plugins/label/test.py b/deluge/plugins/Label/deluge/plugins/label/test.py index ddd3dd437..ea6b4582b 100644 --- a/deluge/plugins/Label/deluge/plugins/label/test.py +++ b/deluge/plugins/Label/deluge/plugins/label/test.py @@ -54,17 +54,17 @@ id = sclient.get_session_state()[0] print("#add") sclient.label_add("test") print("#set") -sclient.label_set_torrent(id,"test") +sclient.label_set_torrent(id, "test") -print(sclient.get_torrents_status({"label":"test"},"name")) +print(sclient.get_torrents_status({"label":"test"}, "name")) print("#set options") -sclient.label_set_options("test",{"max_download_speed":999}, True) -print(sclient.get_torrent_status(id, ["max_download_speed"]) , "999") -sclient.label_set_options("test",{"max_download_speed":9}, True) -print(sclient.get_torrent_status(id, ["max_download_speed"]) , "9") -sclient.label_set_options("test",{"max_download_speed":888}, False) -print(sclient.get_torrent_status(id, ["max_download_speed"]) , "9 (888)") +sclient.label_set_options("test", {"max_download_speed":999}, True) +print(sclient.get_torrent_status(id, ["max_download_speed"]), "999") +sclient.label_set_options("test", {"max_download_speed":9}, True) +print(sclient.get_torrent_status(id, ["max_download_speed"]), "9") +sclient.label_set_options("test", {"max_download_speed":888}, False) +print(sclient.get_torrent_status(id, ["max_download_speed"]), "9 (888)") -print(sclient.get_torrent_status(id,['name', 'tracker_host', 'label'])) +print(sclient.get_torrent_status(id, ['name', 'tracker_host', 'label'])) diff --git a/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py b/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py index 5d16e660a..24045894b 100644 --- a/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py +++ b/deluge/plugins/Scheduler/deluge/plugins/scheduler/gtkui.py @@ -63,12 +63,12 @@ class SchedulerSelectWidget(gtk.DrawingArea): self.colors = [[115.0/255, 210.0/255, 22.0/255], [237.0/255, 212.0/255, 0.0/255], [204.0/255, 0.0/255, 0.0/255]] self.button_state = [[0] * 7 for dummy in xrange(24)] - self.start_point = [0,0] - self.hover_point = [-1,-1] + self.start_point = [0, 0] + self.hover_point = [-1, -1] self.hover_label = hover self.hover_days = DAYS self.mouse_press = False - self.set_size_request(350,150) + self.set_size_request(350, 150) def set_button_state(self, state): self.button_state = [] @@ -104,7 +104,7 @@ class SchedulerSelectWidget(gtk.DrawingArea): if y > 6: y = 6 elif y < 0: y = 0 - return [x,y] + return [x, y] #mouse down def mouse_down(self, widget, event): @@ -148,7 +148,7 @@ class SchedulerSelectWidget(gtk.DrawingArea): #clear hover text on mouse leave def mouse_leave(self, widget, event): self.hover_label.set_text("") - self.hover_point = [-1,-1] + self.hover_point = [-1, -1] class GtkUI(GtkPluginBase): def enable(self): diff --git a/deluge/plugins/Stats/deluge/plugins/stats/graph.py b/deluge/plugins/Stats/deluge/plugins/stats/graph.py index 7d82a324e..76f2e8630 100644 --- a/deluge/plugins/Stats/deluge/plugins/stats/graph.py +++ b/deluge/plugins/Stats/deluge/plugins/stats/graph.py @@ -59,7 +59,7 @@ def default_formatter(value): def size_formatter_scale(value): scale = 1.0 - for i in range(0,3): + for i in range(0, 3): scale = scale * 1024.0 if value / scale < 1024: return scale @@ -86,9 +86,9 @@ class Graph: self.mean_selected = True self.legend_selected = True self.max_selected = True - self.black = (0, 0 , 0,) + self.black = (0, 0, 0,) self.interval = 2 # 2 secs - self.text_bg = (255, 255 , 255, 128) # prototyping + self.text_bg = (255, 255, 255, 128) # prototyping self.set_left_axis() def set_left_axis(self, **kargs): diff --git a/deluge/plugins/Stats/deluge/plugins/stats/test.py b/deluge/plugins/Stats/deluge/plugins/stats/test.py index 1528305c8..419cc5a2d 100644 --- a/deluge/plugins/Stats/deluge/plugins/stats/test.py +++ b/deluge/plugins/Stats/deluge/plugins/stats/test.py @@ -19,7 +19,7 @@ def test_sync(): n.savedUpSpeeds = upload n.savedDownSpeeds = download - n.draw(800,200) + n.draw(800, 200) n.surface.write_to_png('output_sync.png') def test_async(): @@ -69,7 +69,7 @@ def test_write(): surface.write_to_png(file_like) data = "".join(file_like.data) - f = open("file_like.png","wb") + f = open("file_like.png", "wb") f.write(data) f.close() diff --git a/deluge/plugins/Stats/deluge/plugins/stats/test_total.py b/deluge/plugins/Stats/deluge/plugins/stats/test_total.py index 18c3af0ba..06cfe189d 100644 --- a/deluge/plugins/Stats/deluge/plugins/stats/test_total.py +++ b/deluge/plugins/Stats/deluge/plugins/stats/test_total.py @@ -5,7 +5,7 @@ sclient.set_core_uri() def print_totals(totals): for name, value in totals.iteritems(): - print(name , fsize(value)) + print(name, fsize(value)) print("overhead:") print("up:", fsize(totals["total_upload"] - totals["total_payload_upload"] )) diff --git a/deluge/scripts/create_plugin.py b/deluge/scripts/create_plugin.py index f578407e2..5bb7964e2 100644 --- a/deluge/scripts/create_plugin.py +++ b/deluge/scripts/create_plugin.py @@ -14,11 +14,11 @@ import os import sys import deluge.common parser = OptionParser() -parser.add_option("-n", "--name", dest="name",help="plugin name") -parser.add_option("-m", "--module-name", dest="module",help="plugin name") -parser.add_option("-p", "--basepath", dest="path",help="base path") -parser.add_option("-a", "--author-name", dest="author_name",help="author name,for the GPL header") -parser.add_option("-e", "--author-email", dest="author_email",help="author email,for the GPL header") +parser.add_option("-n", "--name", dest="name", help="plugin name") +parser.add_option("-m", "--module-name", dest="module", help="plugin name") +parser.add_option("-p", "--basepath", dest="path", help="base path") +parser.add_option("-a", "--author-name", dest="author_name", help="author name,for the GPL header") +parser.add_option("-e", "--author-email", dest="author_email", help="author email,for the GPL header") parser.add_option("-u", "--url", dest="url", help="Homepage URL") parser.add_option("-c", "--config", dest="configdir", help="location of deluge configuration") @@ -83,7 +83,7 @@ def create_plugin(): } filename = os.path.join(path, filename) - f = open(filename,"w") + f = open(filename, "w") if filename.endswith(".py") and include_gpl: f.write(GPL % args) f.write(template % args) @@ -97,20 +97,20 @@ def create_plugin(): os.mkdir(data_dir) print("creating files..") - write_file(plugin_base,"setup.py", SETUP) + write_file(plugin_base, "setup.py", SETUP) write_file(deluge_namespace, "__init__.py", NAMESPACE_INIT, False) write_file(plugins_namespace, "__init__.py", NAMESPACE_INIT, False) - write_file(src,"__init__.py", INIT) - write_file(src,"gtkui.py", GTKUI) - write_file(src,"webui.py", WEBUI) - write_file(src,"core.py", CORE) + write_file(src, "__init__.py", INIT) + write_file(src, "gtkui.py", GTKUI) + write_file(src, "webui.py", WEBUI) + write_file(src, "core.py", CORE) write_file(src, "common.py", COMMON) write_file(data_dir, "config.glade", GLADE) write_file(data_dir, "%s.js" % safe_name, DEFAULT_JS) #add an input parameter for this? print("building dev-link..") - write_file(plugin_base,"create_dev_link.sh", CREATE_DEV_LINK) + write_file(plugin_base, "create_dev_link.sh", CREATE_DEV_LINK) dev_link_path = os.path.join(plugin_base, "create_dev_link.sh") os.system("chmod +x %s" % dev_link_path) #lazy.. os.system(dev_link_path) diff --git a/deluge/scripts/wiki_docgen.py b/deluge/scripts/wiki_docgen.py index 6987b3a93..fbfec8f1d 100644 --- a/deluge/scripts/wiki_docgen.py +++ b/deluge/scripts/wiki_docgen.py @@ -49,7 +49,7 @@ print("\n\n") if 0: #aclient non-core methods = sorted([m for m in dir(aclient) if not m.startswith('_') if not m in ['add_torrent_file', 'has_callback', 'get_method', - 'methodHelp','methodSignature','list_methods','add_torrent_file_binary']]) + 'methodHelp', 'methodSignature', 'list_methods', 'add_torrent_file_binary']]) for m in methods: func = getattr(aclient, m) @@ -109,7 +109,7 @@ if 0: #keys {{{ #!python >>>sorted(sclient.get_status_keys())""") - print("\n".join(textwrap.wrap(str(sorted(sclient.get_status_keys())),100))) + print("\n".join(textwrap.wrap(str(sorted(sclient.get_status_keys())), 100))) print("""}}}""") diff --git a/deluge/ui/Win32IconImagePlugin.py b/deluge/ui/Win32IconImagePlugin.py index 5d0820eda..38c302c0a 100644 --- a/deluge/ui/Win32IconImagePlugin.py +++ b/deluge/ui/Win32IconImagePlugin.py @@ -151,7 +151,7 @@ class Win32IcoFile (object): # change tile dimension to only encompass XOR image im.size = im.size[0], im.size[1] / 2 d, e, o, a = im.tile[0] - im.tile[0] = d, (0,0) + im.size, o, a + im.tile[0] = d, (0, 0) + im.size, o, a # figure out where AND mask image starts mode = a[0] diff --git a/deluge/ui/console/colors.py b/deluge/ui/console/colors.py index 4aea1be0b..fe0e719c1 100644 --- a/deluge/ui/console/colors.py +++ b/deluge/ui/console/colors.py @@ -59,16 +59,16 @@ color_pairs = { # Some default color schemes schemes = { "input": ("white", "black"), - "normal": ("white","black"), + "normal": ("white", "black"), "status": ("yellow", "blue", "bold"), "info": ("white", "black", "bold"), "error": ("red", "black", "bold"), "success": ("green", "black", "bold"), "event": ("magenta", "black", "bold"), "selected": ("black", "white", "bold"), - "marked": ("white","blue","bold"), - "selectedmarked": ("blue","white","bold"), - "header": ("green","black","bold"), + "marked": ("white", "blue", "bold"), + "selectedmarked": ("blue", "white", "bold"), + "header": ("green", "black", "bold"), "filterstatus": ("green", "blue", "bold") } @@ -107,7 +107,7 @@ def init_colors(): # but can also fail on others, so we try/except try: curses.init_pair(counter, curses.COLOR_WHITE, curses.COLOR_BLACK) - color_pairs[("white","black")] = counter + color_pairs[("white", "black")] = counter except: pass diff --git a/deluge/ui/console/commands/gui.py b/deluge/ui/console/commands/gui.py index eca455af6..320f485be 100644 --- a/deluge/ui/console/commands/gui.py +++ b/deluge/ui/console/commands/gui.py @@ -46,7 +46,7 @@ class Command(BaseCommand): try: at = component.get("AllTorrents") except KeyError: - at = AllTorrents(console.stdscr,console.encoding) + at = AllTorrents(console.stdscr, console.encoding) console.set_mode(at) at._go_top = True at.resume() diff --git a/deluge/ui/console/main.py b/deluge/ui/console/main.py index e0aa9a8a0..5ce8eb1ec 100644 --- a/deluge/ui/console/main.py +++ b/deluge/ui/console/main.py @@ -77,7 +77,7 @@ class Console(_UI): self.console_cmds = load_commands(os.path.join(UI_PATH, 'commands')) class CommandOptionGroup(optparse.OptionGroup): def __init__(self, parser, title, description=None, cmds=None): - optparse.OptionGroup.__init__(self,parser, title, description) + optparse.OptionGroup.__init__(self, parser, title, description) self.cmds = cmds def format_help(self, formatter): @@ -91,7 +91,7 @@ class Console(_UI): allnames = [cname] allnames.extend(cmd.aliases) cname = "/".join(allnames) - result += formatter.format_heading(" - ".join([cname,cmd.__doc__])) + result += formatter.format_heading(" - ".join([cname, cmd.__doc__])) formatter.indent() result += "%*s%s\n" % (formatter.current_indent, "", cmd.usage.split('\n')[0]) formatter.dedent() @@ -400,7 +400,7 @@ Please use commands from the command line, eg:\n no matches are found. """ - if self.interactive and isinstance(self.screen,deluge.ui.console.modes.legacy.Legacy): + if self.interactive and isinstance(self.screen, deluge.ui.console.modes.legacy.Legacy): return self.screen.match_torrent(string) matches = [] @@ -413,7 +413,7 @@ Please use commands from the command line, eg:\n def get_torrent_name(self, torrent_id): - if self.interactive and hasattr(self.screen,"get_torrent_name"): + if self.interactive and hasattr(self.screen, "get_torrent_name"): return self.screen.get_torrent_name(torrent_id) for tid, name in self.torrents: @@ -424,15 +424,15 @@ Please use commands from the command line, eg:\n def set_batch_write(self, batch): - if self.interactive and isinstance(self.screen,deluge.ui.console.modes.legacy.Legacy): + if self.interactive and isinstance(self.screen, deluge.ui.console.modes.legacy.Legacy): return self.screen.set_batch_write(batch) def tab_complete_torrent(self, line): - if self.interactive and isinstance(self.screen,deluge.ui.console.modes.legacy.Legacy): + if self.interactive and isinstance(self.screen, deluge.ui.console.modes.legacy.Legacy): return self.screen.tab_complete_torrent(line) def tab_complete_path(self, line, type="file", ext="", sort="name", dirs_first=True): - if self.interactive and isinstance(self.screen,deluge.ui.console.modes.legacy.Legacy): + if self.interactive and isinstance(self.screen, deluge.ui.console.modes.legacy.Legacy): return self.screen.tab_complete_path(line, type=type, ext=ext, sort=sort, dirs_first=dirs_first) def set_mode(self, mode): @@ -447,7 +447,7 @@ Please use commands from the command line, eg:\n def write(self, s): if self.interactive: - if isinstance(self.screen,deluge.ui.console.modes.legacy.Legacy): + if isinstance(self.screen, deluge.ui.console.modes.legacy.Legacy): self.screen.write(s) else: component.get("LegacyUI").add_line(s, False) @@ -457,7 +457,7 @@ Please use commands from the command line, eg:\n def write_event(self, s): if self.interactive: - if isinstance(self.screen,deluge.ui.console.modes.legacy.Legacy): + if isinstance(self.screen, deluge.ui.console.modes.legacy.Legacy): self.events.append(s) self.screen.write(s) else: diff --git a/deluge/ui/console/modes/add_util.py b/deluge/ui/console/modes/add_util.py index b741a6a11..37ec52b7c 100644 --- a/deluge/ui/console/modes/add_util.py +++ b/deluge/ui/console/modes/add_util.py @@ -41,7 +41,7 @@ import deluge.component as component from deluge.ui.common import TorrentInfo import deluge.common -import os,base64,glob +import os, base64, glob import logging log = logging.getLogger(__name__) @@ -56,9 +56,9 @@ def __bracket_fixup(path): if sentinal > 65535: log.error("Can't fix brackets in path, path contains all possible sentinal characters") return path - newpath = path.replace("]",unichr(sentinal)) - newpath = newpath.replace("[","[[]") - newpath = newpath.replace(unichr(sentinal),"[]]") + newpath = path.replace("]", unichr(sentinal)) + newpath = newpath.replace("[", "[[]") + newpath = newpath.replace(unichr(sentinal), "[]]") return newpath def add_torrent(t_file, options, success_cb, fail_cb, ress): @@ -78,29 +78,29 @@ def add_torrent(t_file, options, success_cb, fail_cb, ress): ress["total"] = num_files if num_files <= 0: - fail_cb("Doesn't exist",t_file,ress) + fail_cb("Doesn't exist", t_file, ress) for f in files: if is_url: - client.core.add_torrent_url(f, t_options).addCallback(success_cb,f,ress).addErrback(fail_cb,f,ress) + client.core.add_torrent_url(f, t_options).addCallback(success_cb, f, ress).addErrback(fail_cb, f, ress) elif is_mag: - client.core.add_torrent_magnet(f, t_options).addCallback(success_cb,f,ress).addErrback(fail_cb,f,ress) + client.core.add_torrent_magnet(f, t_options).addCallback(success_cb, f, ress).addErrback(fail_cb, f, ress) else: if not os.path.exists(f): - fail_cb("Doesn't exist",f,ress) + fail_cb("Doesn't exist", f, ress) continue if not os.path.isfile(f): - fail_cb("Is a directory",f,ress) + fail_cb("Is a directory", f, ress) continue try: TorrentInfo(f) except Exception as e: - fail_cb(e.message,f,ress) + fail_cb(e.message, f, ress) continue filename = os.path.split(f)[-1] filedump = base64.encodestring(open(f).read()) - client.core.add_torrent_file(filename, filedump, t_options).addCallback(success_cb,f,ress).addErrback(fail_cb,f,ress) + client.core.add_torrent_file(filename, filedump, t_options).addCallback(success_cb, f, ress).addErrback(fail_cb, f, ress) diff --git a/deluge/ui/console/modes/addtorrents.py b/deluge/ui/console/modes/addtorrents.py index 0b53e5721..d73e0ae51 100644 --- a/deluge/ui/console/modes/addtorrents.py +++ b/deluge/ui/console/modes/addtorrents.py @@ -260,7 +260,7 @@ class AddTorrents(BaseMode, component.Component): if (self.view_offset + self._listing_space) <= self.cursel + 1: self.view_offset = self.cursel - self._listing_space + 1 - def set_popup(self,pu): + def set_popup(self, pu): self.popup = pu self.refresh() @@ -431,21 +431,21 @@ class AddTorrents(BaseMode, component.Component): "total": len(self.marked), "fmsg":[]} - def fail_cb(msg,t_file,ress): - log.debug("failed to add torrent: %s: %s"%(t_file,msg)) + def fail_cb(msg, t_file, ress): + log.debug("failed to add torrent: %s: %s"%(t_file, msg)) ress["fail"]+=1 - ress["fmsg"].append("{!input!} * %s: {!error!}%s"%(t_file,msg)) + ress["fmsg"].append("{!input!} * %s: {!error!}%s"%(t_file, msg)) if (ress["succ"]+ress["fail"]) >= ress["total"]: - self.alltorrentmode._report_add_status(ress["succ"],ress["fail"],ress["fmsg"]) + self.alltorrentmode._report_add_status(ress["succ"], ress["fail"], ress["fmsg"]) - def success_cb(tid,t_file,ress): + def success_cb(tid, t_file, ress): if tid: - log.debug("added torrent: %s (%s)"%(t_file,tid)) + log.debug("added torrent: %s (%s)"%(t_file, tid)) ress["succ"]+=1 if (ress["succ"]+ress["fail"]) >= ress["total"]: - self.alltorrentmode._report_add_status(ress["succ"],ress["fail"],ress["fmsg"]) + self.alltorrentmode._report_add_status(ress["succ"], ress["fail"], ress["fmsg"]) else: - fail_cb("Already in session (probably)",t_file,ress) + fail_cb("Already in session (probably)", t_file, ress) for m in self.marked: filename = m @@ -472,7 +472,7 @@ class AddTorrents(BaseMode, component.Component): ap = 0 else: ap = 1 - self.popup = InputPopup(self,"Add Torrents (Esc to cancel)",close_cb=_do_add, height_req=17) + self.popup = InputPopup(self, "Add Torrents (Esc to cancel)", close_cb=_do_add, height_req=17) msg = "Adding torrent files:" for i, m in enumerate(self.marked): @@ -485,8 +485,8 @@ class AddTorrents(BaseMode, component.Component): self.popup.add_text(msg) self.popup.add_spaces(1) - self.popup.add_text_input("Download Folder:","location", dl) - self.popup.add_select_input("Add Paused:","add_paused",["Yes","No"],[True,False],ap) + self.popup.add_text_input("Download Folder:", "location", dl) + self.popup.add_select_input("Add Paused:", "add_paused", ["Yes", "No"], [True, False], ap) def _go_up(self): diff --git a/deluge/ui/console/modes/alltorrents.py b/deluge/ui/console/modes/alltorrents.py index 22b82fea8..6252c044c 100644 --- a/deluge/ui/console/modes/alltorrents.py +++ b/deluge/ui/console/modes/alltorrents.py @@ -56,7 +56,7 @@ from legacy import Legacy from twisted.internet import defer -import format_utils,column +import format_utils, column try: import curses @@ -220,8 +220,8 @@ DEFAULT_PREFS = { column_pref_names = ["queue", "name", "size", "state", "progress", "seeds", "peers", "downspeed", "upspeed", "eta", "ratio", "avail", - "added", "tracker", "savepath","downloaded","uploaded", - "remaining", "owner","downloading_time","seeding_time", + "added", "tracker", "savepath", "downloaded", "uploaded", + "remaining", "owner", "downloading_time", "seeding_time", "completed", "seeds_peers_ratio", "complete_seen", "down_limit", "up_limit", "shared", ] @@ -339,7 +339,7 @@ class AllTorrents(BaseMode, component.Component): component.start(["AllTorrents"]) self._info_fields = [ - ("Name",None, ("name",)), + ("Name", None, ("name",)), ("State", None, ("state",)), ("Down Speed", format_utils.format_speed, ("download_payload_rate",)), ("Up Speed", format_utils.format_speed, ("upload_payload_rate",)), @@ -350,7 +350,7 @@ class AllTorrents(BaseMode, component.Component): ("Uploaded", deluge.common.fsize, ("total_uploaded",)), ("Share Ratio", format_utils.format_float, ("ratio",)), ("Seeds", format_utils.format_seeds_peers, ("num_seeds", "total_seeds")), - ("Peers", format_utils.format_seeds_peers,("num_peers", "total_peers")), + ("Peers", format_utils.format_seeds_peers, ("num_peers", "total_peers")), ("Active Time", deluge.common.ftime, ("active_time",)), ("Seeding Time", deluge.common.ftime, ("seeding_time",)), ("Complete Seen", format_utils.format_date_never, ("last_seen_complete",)), @@ -372,21 +372,21 @@ class AllTorrents(BaseMode, component.Component): self.legacy_mode = Legacy(self.stdscr, self.encoding) if self.config["first_run"]: - self.popup = MessagePopup(self,"Welcome to Deluge", HELP_STR, width_req=0.75) + self.popup = MessagePopup(self, "Welcome to Deluge", HELP_STR, width_req=0.75) self.config["first_run"] = False self.config.save() # component start/update def start(self): - component.get("SessionProxy").get_torrents_status(self.__status_dict, self.__status_fields).addCallback(self.set_state,False) + component.get("SessionProxy").get_torrents_status(self.__status_dict, self.__status_fields).addCallback(self.set_state, False) def update(self): - component.get("SessionProxy").get_torrents_status(self.__status_dict, self.__status_fields).addCallback(self.set_state,True) + component.get("SessionProxy").get_torrents_status(self.__status_dict, self.__status_fields).addCallback(self.set_state, True) if self.__torrent_info_id: component.get("SessionProxy").get_torrent_status(self.__torrent_info_id, self.__status_keys).addCallback(self._on_torrent_status) def update_config(self): - self.config = ConfigManager("console.conf",DEFAULT_PREFS) + self.config = ConfigManager("console.conf", DEFAULT_PREFS) s_primary = self.config["sort_primary"] s_secondary = self.config["sort_secondary"] self.__cols_to_show = [ @@ -417,14 +417,14 @@ class AllTorrents(BaseMode, component.Component): def __update_columns(self): self.column_widths = [self.config["%s_width"%c] for c in self.__cols_to_show] - req = sum(filter(lambda x:x >= 0,self.column_widths)) + req = sum(filter(lambda x:x >= 0, self.column_widths)) if (req > self.cols): # can't satisfy requests, just spread out evenly cw = int(self.cols/len(self.__columns)) - for i in range(0,len(self.column_widths)): + for i in range(0, len(self.column_widths)): self.column_widths[i] = cw else: rem = self.cols - req - var_cols = len(filter(lambda x: x < 0,self.column_widths)) + var_cols = len(filter(lambda x: x < 0, self.column_widths)) if (var_cols > 0): vw = int(rem/var_cols) for i in range(0, len(self.column_widths)): @@ -473,21 +473,21 @@ class AllTorrents(BaseMode, component.Component): self.refresh() def get_torrent_name(self, torrent_id): - for p,i in enumerate(self._sorted_ids): + for p, i in enumerate(self._sorted_ids): if torrent_id == i: return self.torrent_names[p] return None def _scroll_up(self, by): prevoff = self.curoff - self.cursel = max(self.cursel - by,1) + self.cursel = max(self.cursel - by, 1) if ((self.cursel - 1) < self.curoff): - self.curoff = max(self.cursel - 1,1) + self.curoff = max(self.cursel - 1, 1) return prevoff != self.curoff def _scroll_down(self, by): prevoff = self.curoff - self.cursel = min(self.cursel + by,self.numtorrents) + self.cursel = min(self.cursel + by, self.numtorrents) if ((self.curoff + self.rows - 5) < self.cursel): self.curoff = self.cursel - self.rows + 5 return prevoff != self.curoff @@ -510,14 +510,14 @@ class AllTorrents(BaseMode, component.Component): name = state["name"] off = int((self.cols/4)-(len(name)/2)) self.popup.set_title(name) - for i,f in enumerate(self._info_fields): + for i, f in enumerate(self._info_fields): if f[1] != None: args = [] try: for key in f[2]: args.append(state[key]) except: - log.debug("Could not get info field: %s",e) + log.debug("Could not get info field: %s", e) continue info = f[1](*args) else: @@ -525,14 +525,14 @@ class AllTorrents(BaseMode, component.Component): nl = len(f[0])+4 if (nl+len(info))>self.popup.width: - self.popup.add_line("{!info!}%s: {!input!}%s"%(f[0],info[:(self.popup.width - nl)])) + self.popup.add_line("{!info!}%s: {!input!}%s"%(f[0], info[:(self.popup.width - nl)])) info = info[(self.popup.width - nl):] n = self.popup.width-3 chunks = [info[i:i+n] for i in xrange(0, len(info), n)] for c in chunks: self.popup.add_line(" %s"%c) else: - self.popup.add_line("{!info!}%s: {!input!}%s"%(f[0],info)) + self.popup.add_line("{!info!}%s: {!input!}%s"%(f[0], info)) self.refresh() else: self.__torrent_info_id = None @@ -627,34 +627,34 @@ class AllTorrents(BaseMode, component.Component): def dodeets(arg): if arg and True in arg[0]: self.stdscr.erase() - component.get("ConsoleUI").set_mode(AddTorrents(self,self.stdscr, self.config, self.encoding)) + component.get("ConsoleUI").set_mode(AddTorrents(self, self.stdscr, self.config, self.encoding)) else: - self.messages.append(("Error","An error occurred trying to display add torrents screen")) + self.messages.append(("Error", "An error occurred trying to display add torrents screen")) component.stop(["AllTorrents"]).addCallback(dodeets) - def show_torrent_details(self,tid): + def show_torrent_details(self, tid): def dodeets(arg): if arg and True in arg[0]: self.stdscr.erase() - component.get("ConsoleUI").set_mode(TorrentDetail(self,tid,self.stdscr, self.config, self.encoding)) + component.get("ConsoleUI").set_mode(TorrentDetail(self, tid, self.stdscr, self.config, self.encoding)) else: - self.messages.append(("Error","An error occurred trying to display torrent details")) + self.messages.append(("Error", "An error occurred trying to display torrent details")) component.stop(["AllTorrents"]).addCallback(dodeets) def show_preferences(self): def _on_get_config(config): - client.core.get_listen_port().addCallback(_on_get_listen_port,config) + client.core.get_listen_port().addCallback(_on_get_listen_port, config) - def _on_get_listen_port(port,config): - client.core.get_cache_status().addCallback(_on_get_cache_status,port,config) + def _on_get_listen_port(port, config): + client.core.get_cache_status().addCallback(_on_get_cache_status, port, config) - def _on_get_cache_status(status,port,config): + def _on_get_cache_status(status, port, config): def doprefs(arg): if arg and True in arg[0]: self.stdscr.erase() - component.get("ConsoleUI").set_mode(Preferences(self,config,self.config,port,status,self.stdscr,self.encoding)) + component.get("ConsoleUI").set_mode(Preferences(self, config, self.config, port, status, self.stdscr, self.encoding)) else: - self.messages.append(("Error","An error occurred trying to display preferences")) + self.messages.append(("Error", "An error occurred trying to display preferences")) component.stop(["AllTorrents"]).addCallback(doprefs) client.core.get_config().addCallback(_on_get_config) @@ -664,9 +664,9 @@ class AllTorrents(BaseMode, component.Component): def doevents(arg): if arg and True in arg[0]: self.stdscr.erase() - component.get("ConsoleUI").set_mode(EventView(self,self.stdscr,self.encoding)) + component.get("ConsoleUI").set_mode(EventView(self, self.stdscr, self.encoding)) else: - self.messages.append(("Error","An error occurred trying to display events")) + self.messages.append(("Error", "An error occurred trying to display events")) component.stop(["AllTorrents"]).addCallback(doevents) def __legacy_mode(self): @@ -677,7 +677,7 @@ class AllTorrents(BaseMode, component.Component): self.legacy_mode.refresh() curses.curs_set(2) else: - self.messages.append(("Error","An error occurred trying to switch to legacy mode")) + self.messages.append(("Error", "An error occurred trying to switch to legacy mode")) component.stop(["AllTorrents"]).addCallback(dolegacy) def _torrent_filter(self, idx, data): @@ -716,26 +716,26 @@ class AllTorrents(BaseMode, component.Component): return True def _show_torrent_filter_popup(self): - self.popup = SelectablePopup(self,"Filter Torrents", self._torrent_filter) - self.popup.add_line("_All",data=FILTER.ALL) - self.popup.add_line("Ac_tive",data=FILTER.ACTIVE) - self.popup.add_line("_Downloading",data=FILTER.DOWNLOADING,foreground="green") - self.popup.add_line("_Seeding",data=FILTER.SEEDING,foreground="cyan") - self.popup.add_line("_Paused",data=FILTER.PAUSED) - self.popup.add_line("_Error",data=FILTER.ERROR,foreground="red") - self.popup.add_line("_Checking",data=FILTER.CHECKING,foreground="blue") - self.popup.add_line("Q_ueued",data=FILTER.QUEUED,foreground="yellow") - self.popup.add_line("A_llocating",data=FILTER.ALLOCATING,foreground="yellow") - self.popup.add_line("_Moving",data=FILTER.MOVING,foreground="green") + self.popup = SelectablePopup(self, "Filter Torrents", self._torrent_filter) + self.popup.add_line("_All", data=FILTER.ALL) + self.popup.add_line("Ac_tive", data=FILTER.ACTIVE) + self.popup.add_line("_Downloading", data=FILTER.DOWNLOADING, foreground="green") + self.popup.add_line("_Seeding", data=FILTER.SEEDING, foreground="cyan") + self.popup.add_line("_Paused", data=FILTER.PAUSED) + self.popup.add_line("_Error", data=FILTER.ERROR, foreground="red") + self.popup.add_line("_Checking", data=FILTER.CHECKING, foreground="blue") + self.popup.add_line("Q_ueued", data=FILTER.QUEUED, foreground="yellow") + self.popup.add_line("A_llocating", data=FILTER.ALLOCATING, foreground="yellow") + self.popup.add_line("_Moving", data=FILTER.MOVING, foreground="green") def _report_add_status(self, succ_cnt, fail_cnt, fail_msgs): if fail_cnt == 0: - self.report_message("Torrents Added","{!success!}Successfully added %d torrent(s)"%succ_cnt) + self.report_message("Torrents Added", "{!success!}Successfully added %d torrent(s)"%succ_cnt) else: msg = ("{!error!}Failed to add the following %d torrent(s):\n {!input!}"%fail_cnt)+"\n ".join(fail_msgs) if succ_cnt != 0: msg += "\n \n{!success!}Successfully added %d torrent(s)"%succ_cnt - self.report_message("Torrent Add Report",msg) + self.report_message("Torrent Add Report", msg) def _show_torrent_add_popup(self): @@ -767,7 +767,7 @@ class AllTorrents(BaseMode, component.Component): elif deluge.common.is_url(url): client.core.add_torrent_url(url, t_options).addCallback(success_cb, url).addErrback(fail_cb, url) else: - self.messages.append(("Error","{!error!}Invalid URL or magnet link: %s" % url)) + self.messages.append(("Error", "{!error!}Invalid URL or magnet link: %s" % url)) return log.debug("Adding Torrent(s): %s (dl path: %s) (paused: %d)", url, result["path"], result["add_paused"]) @@ -786,7 +786,7 @@ class AllTorrents(BaseMode, component.Component): except KeyError: pass - self.popup = InputPopup(self,"Add Torrent (Esc to cancel)", close_cb=do_add_from_url) + self.popup = InputPopup(self, "Add Torrent (Esc to cancel)", close_cb=do_add_from_url) self.popup.add_text_input("Enter torrent URL or Magnet link:", "url") self.popup.add_text_input("Enter save path:", "path", dl) self.popup.add_select_input("Add Paused:", "add_paused", ["Yes", "No"], [True, False], ap) @@ -801,7 +801,7 @@ class AllTorrents(BaseMode, component.Component): elif data == 2: show_add_url_popup() - self.popup = SelectablePopup(self,"Add torrent", option_chosen) + self.popup = SelectablePopup(self, "Add torrent", option_chosen) self.popup.add_line("From _File(s)", data=1) self.popup.add_line("From _URL or Magnet", data=2) self.popup.add_line("_Cancel", data=0) @@ -834,14 +834,14 @@ class AllTorrents(BaseMode, component.Component): self.popup.add_checked_input(name, prop, state) - def report_message(self,title,message): - self.messages.append((title,message)) + def report_message(self, title, message): + self.messages.append((title, message)) def clear_marks(self): self.marked = [] self.last_mark = -1 - def set_popup(self,pu): + def set_popup(self, pu): self.popup = pu self.refresh() @@ -857,8 +857,8 @@ class AllTorrents(BaseMode, component.Component): # show a message popup if there's anything queued if self.popup == None and self.messages: - title,msg = self.messages.popleft() - self.popup = MessagePopup(self,title,msg, width_req=1.0) + title, msg = self.messages.popleft() + self.popup = MessagePopup(self, title, msg, width_req=1.0) if not lines: if component.get("ConsoleUI").screen != self: @@ -867,10 +867,10 @@ class AllTorrents(BaseMode, component.Component): # Update the status bars if self._curr_filter == None: - self.add_string(0,self.statusbars.topbar) + self.add_string(0, self.statusbars.topbar) else: - self.add_string(0,"%s {!filterstatus!}Current filter: %s"%(self.statusbars.topbar,self._curr_filter)) - self.add_string(1,self.column_string) + self.add_string(0, "%s {!filterstatus!}Current filter: %s"%(self.statusbars.topbar, self._curr_filter)) + self.add_string(1, self.column_string) if self.entering_search: string = { @@ -914,7 +914,7 @@ class AllTorrents(BaseMode, component.Component): def draw_row(index): if index not in cr: ts = curstate[sorted_ids[index]] - cr[index] = (fr([gcv(name,ts) for name in cols],colw),ts["state"]) + cr[index] = (fr([gcv(name, ts) for name in cols], colw), ts["state"]) return cr[index] if lines: @@ -980,12 +980,12 @@ class AllTorrents(BaseMode, component.Component): attr = "bold" if attr: - colorstr = "{!%s,%s,%s!}"%(fg,bg,attr) + colorstr = "{!%s,%s,%s!}"%(fg, bg, attr) else: - colorstr = "{!%s,%s!}"%(fg,bg) + colorstr = "{!%s,%s!}"%(fg, bg) try: - self.add_string(currow,"%s%s"%(colorstr,row[0]),trim=False) + self.add_string(currow, "%s%s"%(colorstr, row[0]), trim=False) except: #Yeah, this should be fixed in some better way pass @@ -1014,7 +1014,7 @@ class AllTorrents(BaseMode, component.Component): curses.doupdate() - def _mark_unmark(self,idx): + def _mark_unmark(self, idx): if idx in self.marked: self.marked.remove(idx) self.last_mark = -1 @@ -1059,7 +1059,7 @@ class AllTorrents(BaseMode, component.Component): search_space = reversed(search_space) search_string = self.search_string.lower() - for i,n in search_space: + for i, n in search_space: n = n.lower() if n.find(search_string) != -1: if skip > 0: @@ -1130,7 +1130,7 @@ class AllTorrents(BaseMode, component.Component): elif c in [10, curses.KEY_ENTER]: self.last_mark = -1 tid = self.current_torrent_id() - torrent_actions_popup(self, [tid] ,details=True) + torrent_actions_popup(self, [tid], details=True) elif c == 27: self.search_string = "" @@ -1202,13 +1202,13 @@ class AllTorrents(BaseMode, component.Component): if c == curses.KEY_UP: if self.cursel == 1: return if not self._scroll_up(1): - effected_lines = [self.cursel-1,self.cursel] + effected_lines = [self.cursel-1, self.cursel] elif c == curses.KEY_PPAGE: self._scroll_up(int(self.rows/2)) elif c == curses.KEY_DOWN: if self.cursel >= self.numtorrents: return if not self._scroll_down(1): - effected_lines = [self.cursel-2,self.cursel-1] + effected_lines = [self.cursel-2, self.cursel-1] elif c == curses.KEY_NPAGE: self._scroll_down(int(self.rows/2)) elif c == curses.KEY_HOME: @@ -1219,7 +1219,7 @@ class AllTorrents(BaseMode, component.Component): if self.cursel not in self.marked: self.marked.append(self.cursel) self.last_mark = self.cursel - torrent_actions_popup(self,self._selected_torrent_ids(), action=ACTION.REMOVE) + torrent_actions_popup(self, self._selected_torrent_ids(), action=ACTION.REMOVE) elif c == curses.KEY_RIGHT: # We enter a new mode for the selected torrent here @@ -1233,7 +1233,7 @@ class AllTorrents(BaseMode, component.Component): if self.cursel not in self.marked: self.marked.append(self.cursel) self.last_mark = self.cursel - torrent_actions_popup(self,self._selected_torrent_ids(),details=True) + torrent_actions_popup(self, self._selected_torrent_ids(), details=True) return else: if c > 31 and c < 256: @@ -1244,15 +1244,15 @@ class AllTorrents(BaseMode, component.Component): self.__do_search("next") elif chr(c) == 'j': if not self._scroll_up(1): - effected_lines = [self.cursel-1,self.cursel] + effected_lines = [self.cursel-1, self.cursel] elif chr(c) == 'k': if not self._scroll_down(1): - effected_lines = [self.cursel-2,self.cursel-1] + effected_lines = [self.cursel-2, self.cursel-1] elif chr(c) == 'i': cid = self.current_torrent_id() if cid: def cb(): self.__torrent_info_id = None - self.popup = Popup(self,"Info",close_cb=cb, height_req=20) + self.popup = Popup(self, "Info", close_cb=cb, height_req=20) self.popup.add_line("Getting torrent info...") self.__torrent_info_id = cid elif chr(c) == 'm': @@ -1261,9 +1261,9 @@ class AllTorrents(BaseMode, component.Component): elif chr(c) == 'M': if self.last_mark >= 0: if (self.cursel+1) > self.last_mark: - mrange = range(self.last_mark,self.cursel+1) + mrange = range(self.last_mark, self.cursel+1) else: - mrange = range(self.cursel-1,self.last_mark) + mrange = range(self.cursel-1, self.last_mark) self.marked.extend(mrange[1:]) effected_lines = mrange else: diff --git a/deluge/ui/console/modes/basemode.py b/deluge/ui/console/modes/basemode.py index db2d72270..3035be99a 100644 --- a/deluge/ui/console/modes/basemode.py +++ b/deluge/ui/console/modes/basemode.py @@ -122,7 +122,7 @@ class BaseMode(CursesStdIO): def on_resize_norefresh(self, *args): log.debug("on_resize_from_signal") # Get the new rows and cols value - self.rows, self.cols = struct.unpack("hhhh", ioctl(0, termios.TIOCGWINSZ ,"\000"*8))[0:2] + self.rows, self.cols = struct.unpack("hhhh", ioctl(0, termios.TIOCGWINSZ, "\000"*8))[0:2] curses.resizeterm(self.rows, self.cols) def on_resize(self, *args): @@ -177,7 +177,7 @@ class BaseMode(CursesStdIO): # This is the last string so lets append some " " to it s += " " * (self.cols - (col + len(s)) - 1) if trim: - y,x = screen.getmaxyx() + y, x = screen.getmaxyx() if (col+len(s)) > x: s = "%s..."%s[0:x-4-col] screen.addstr(row, col, s, color) @@ -192,7 +192,7 @@ class BaseMode(CursesStdIO): pass # This mode doesn't do anything with popups - def set_popup(self,popup): + def set_popup(self, popup): pass # This mode doesn't support marking @@ -209,7 +209,7 @@ class BaseMode(CursesStdIO): self.draw_statusbars() # Update the status bars - self.add_string(1,"{!info!}Base Mode (or subclass hasn't overridden refresh)") + self.add_string(1, "{!info!}Base Mode (or subclass hasn't overridden refresh)") self.stdscr.redrawwin() self.stdscr.refresh() diff --git a/deluge/ui/console/modes/connectionmanager.py b/deluge/ui/console/modes/connectionmanager.py index 25e9f8f90..221ae72a2 100644 --- a/deluge/ui/console/modes/connectionmanager.py +++ b/deluge/ui/console/modes/connectionmanager.py @@ -35,7 +35,7 @@ # a mode that show's a popup to select which host to connect to -import hashlib,time +import hashlib, time from collections import deque @@ -47,7 +47,7 @@ import deluge.component as component from alltorrents import AllTorrents from basemode import BaseMode -from popup import SelectablePopup,MessagePopup +from popup import SelectablePopup, MessagePopup from input_popup import InputPopup @@ -78,13 +78,13 @@ class ConnectionManager(BaseMode): self.__update_popup() def __update_popup(self): - self.popup = SelectablePopup(self,"Select Host",self.__host_selected) - self.popup.add_line("{!white,black,bold!}'Q'=quit, 'r'=refresh, 'a'=add new host, 'D'=delete host",selectable=False) + self.popup = SelectablePopup(self, "Select Host", self.__host_selected) + self.popup.add_line("{!white,black,bold!}'Q'=quit, 'r'=refresh, 'a'=add new host, 'D'=delete host", selectable=False) for host in self.config["hosts"]: if host[0] in self.statuses: - self.popup.add_line("%s:%d [Online] (%s)"%(host[1],host[2],self.statuses[host[0]]),data=host[0],foreground="green") + self.popup.add_line("%s:%d [Online] (%s)"%(host[1], host[2], self.statuses[host[0]]), data=host[0], foreground="green") else: - self.popup.add_line("%s:%d [Offline]"%(host[1],host[2]),data=host[0],foreground="red") + self.popup.add_line("%s:%d [Offline]"%(host[1], host[2]), data=host[0], foreground="red") self.inlist = True self.refresh() @@ -119,7 +119,7 @@ class ConnectionManager(BaseMode): d.addCallback(on_connect, c, host[0]) d.addErrback(on_connect_failed, host[0]) - def __on_connected(self,result): + def __on_connected(self, result): component.start() self.stdscr.erase() at = AllTorrents(self.stdscr, self.encoding) @@ -132,18 +132,18 @@ class ConnectionManager(BaseMode): client.connect(host[1], host[2], host[3], host[4]).addCallback(self.__on_connected) return False - def __do_add(self,result): + def __do_add(self, result): hostname = result["hostname"] try: port = int(result["port"]) except ValueError: - self.report_message("Can't add host","Invalid port. Must be an integer") + self.report_message("Can't add host", "Invalid port. Must be an integer") return username = result["username"] password = result["password"] for host in self.config["hosts"]: - if (host[1],host[2],host[3]) == (hostname, port, username): - self.report_message("Can't add host","Host already in list") + if (host[1], host[2], host[3]) == (hostname, port, username): + self.report_message("Can't add host", "Host already in list") return newid = hashlib.sha1(str(time.time())).hexdigest() self.config["hosts"].append((newid, hostname, port, username, password)) @@ -152,24 +152,24 @@ class ConnectionManager(BaseMode): def __add_popup(self): self.inlist = False - self.popup = InputPopup(self,"Add Host (up & down arrows to navigate, esc to cancel)",close_cb=self.__do_add) - self.popup.add_text_input("Hostname:","hostname") - self.popup.add_text_input("Port:","port") - self.popup.add_text_input("Username:","username") - self.popup.add_text_input("Password:","password") + self.popup = InputPopup(self, "Add Host (up & down arrows to navigate, esc to cancel)", close_cb=self.__do_add) + self.popup.add_text_input("Hostname:", "hostname") + self.popup.add_text_input("Port:", "port") + self.popup.add_text_input("Username:", "username") + self.popup.add_text_input("Password:", "password") self.refresh() def __delete_current_host(self): - idx,data = self.popup.current_selection() - log.debug("deleting host: %s",data) + idx, data = self.popup.current_selection() + log.debug("deleting host: %s", data) for host in self.config["hosts"]: if host[0] == data: self.config["hosts"].remove(host) break self.config.save() - def report_message(self,title,message): - self.messages.append((title,message)) + def report_message(self, title, message): + self.messages.append((title, message)) def refresh(self): self.stdscr.erase() @@ -177,8 +177,8 @@ class ConnectionManager(BaseMode): self.stdscr.noutrefresh() if self.popup == None and self.messages: - title,msg = self.messages.popleft() - self.popup = MessagePopup(self,title,msg) + title, msg = self.messages.popleft() + self.popup = MessagePopup(self, title, msg) if not self.popup: self.__update_popup() diff --git a/deluge/ui/console/modes/eventview.py b/deluge/ui/console/modes/eventview.py index 6b567b7c8..df54421cd 100644 --- a/deluge/ui/console/modes/eventview.py +++ b/deluge/ui/console/modes/eventview.py @@ -61,7 +61,7 @@ class EventView(BaseMode): self.stdscr.erase() - self.add_string(0,self.statusbars.topbar) + self.add_string(0, self.statusbars.topbar) hstr = "%sPress [h] for help"%(" "*(self.cols - len(self.statusbars.bottombar) - 10)) #This will quite likely fail when switching modes try: @@ -76,7 +76,7 @@ class EventView(BaseMode): pass if events: - for i,event in enumerate(events): + for i, event in enumerate(events): if i - self.offset >= self.rows - 2: more = len(events) - self.offset - self.rows + 2 if more > 0: @@ -86,11 +86,11 @@ class EventView(BaseMode): elif i - self.offset < 0: continue try: - self.add_string(i+1-self.offset,event) + self.add_string(i+1-self.offset, event) except curses.error: pass #This'll just cut the line. Note: This seriously should be fixed in a better way else: - self.add_string(1,"{!white,black,bold!}No events to show yet") + self.add_string(1, "{!white,black,bold!}No events to show yet") if component.get("ConsoleUI").screen != self: return diff --git a/deluge/ui/console/modes/format_utils.py b/deluge/ui/console/modes/format_utils.py index b7ee297dc..16fea01e0 100644 --- a/deluge/ui/console/modes/format_utils.py +++ b/deluge/ui/console/modes/format_utils.py @@ -72,7 +72,7 @@ def format_float(x): return "%.3f"%x def format_seeds_peers(num, total): - return "%d (%d)"%(num,total) + return "%d (%d)"%(num, total) def format_progress(perc): if perc < 100: @@ -81,7 +81,7 @@ def format_progress(perc): return "100%" def format_pieces(num, size): - return "%d (%s)"%(num,deluge.common.fsize(size)) + return "%d (%s)"%(num, deluge.common.fsize(size)) def format_priority(prio): if prio == -2: return "[Mixed]" @@ -104,7 +104,7 @@ def trim_string(string, w, have_dbls): idx = 0 while width < w: chrs.append(string[idx]) - if unicodedata.east_asian_width(string[idx]) in ['W','F']: + if unicodedata.east_asian_width(string[idx]) in ['W', 'F']: width += 2 else: width += 1 @@ -126,16 +126,16 @@ def format_column(col, lim): # for unicode strings. if haveud and col.__class__ is unicode: # might have some double width chars - col = ud_normalize("NFC",col) + col = ud_normalize("NFC", col) dbls = sum(eaw(c) in 'WF' for c in col) size = len(col)+dbls if (size >= lim - 1): - return trim_string(col,lim,dbls>0) + return trim_string(col, lim, dbls>0) else: - return "%s%s"%(col," "*(lim-size)) + return "%s%s"%(col, " "*(lim-size)) def format_row(row, column_widths): - return "".join([format_column(row[i],column_widths[i]) for i in range(0,len(row))]) + return "".join([format_column(row[i], column_widths[i]) for i in range(0, len(row))]) import re _strip_re = re.compile("\{!.*?!\}") @@ -157,13 +157,13 @@ def wrap_string(string,width,min_lines=0,strip_colors=True): ret = [] s1 = string.split("\n") - def insert_clr(s,offset,mtchs,clrs): + def insert_clr(s, offset, mtchs, clrs): end_pos = offset+len(s) while mtchs and (mtchs[0] <= end_pos) and (mtchs[0] >= offset): mtc = mtchs.popleft()-offset clr = clrs.popleft() end_pos += len(clr) - s = "%s%s%s"%(s[:mtc],clr,s[mtc:]) + s = "%s%s%s"%(s[:mtc], clr, s[mtc:]) return s for s in s1: @@ -174,16 +174,16 @@ def wrap_string(string,width,min_lines=0,strip_colors=True): for m in _strip_re.finditer(s): mtchs.append(m.start()) clrs.append(m.group()) - cstr = _strip_re.sub('',s) + cstr = _strip_re.sub('', s) else: cstr = s while len(cstr) > width: - sidx = cstr.rfind(" ",0,width-1) + sidx = cstr.rfind(" ", 0, width-1) sidx += 1 if sidx > 0: if strip_colors: to_app = cstr[0:sidx] - to_app = insert_clr(to_app,offset,mtchs,clrs) + to_app = insert_clr(to_app, offset, mtchs, clrs) ret.append(to_app) offset += len(to_app) else: @@ -196,7 +196,7 @@ def wrap_string(string,width,min_lines=0,strip_colors=True): # can't find a reasonable split, just split at width if strip_colors: to_app = cstr[0:width] - to_app = insert_clr(to_app,offset,mtchs,clrs) + to_app = insert_clr(to_app, offset, mtchs, clrs) ret.append(to_app) offset += len(to_app) else: @@ -207,12 +207,12 @@ def wrap_string(string,width,min_lines=0,strip_colors=True): break if cstr != None: if strip_colors: - ret.append(insert_clr(cstr,offset,mtchs,clrs)) + ret.append(insert_clr(cstr, offset, mtchs, clrs)) else: ret.append(cstr) if min_lines>0: - for i in range(len(ret),min_lines): + for i in range(len(ret), min_lines): ret.append(" ") #Carry colors over to the next line @@ -236,7 +236,7 @@ def strwidth(string): if not isinstance(string, unicode): string = unicode(string, 'utf-8') eaw = east_asian_width - length = sum( [1 + (eaw(c) in ['W','F']) for c in string] ) + length = sum( [1 + (eaw(c) in ['W', 'F']) for c in string] ) #Using list comprehenstion for improved performance #The code above is equal to: #length = 0 diff --git a/deluge/ui/console/modes/input_popup.py b/deluge/ui/console/modes/input_popup.py index 84278841b..44cd8286b 100644 --- a/deluge/ui/console/modes/input_popup.py +++ b/deluge/ui/console/modes/input_popup.py @@ -42,7 +42,7 @@ try: except ImportError: pass -import logging,os,os.path +import logging, os, os.path from popup import Popup, ALIGN @@ -69,7 +69,7 @@ class InputField: pass def set_depend(self,i,inverse=False): - if not isinstance(i,CheckedInput): + if not isinstance(i, CheckedInput): raise Exception("Can only depend on CheckedInputs") self.depend = i self.inverse = inverse @@ -98,13 +98,13 @@ class CheckedInput(InputField): def render(self, screen, row, width, active, col=1): if self.checked and active: - self.parent.add_string(row,self.chkd_act,screen,col,False,True) + self.parent.add_string(row, self.chkd_act, screen, col, False, True) elif self.checked: - self.parent.add_string(row,self.chkd_inact,screen,col,False,True) + self.parent.add_string(row, self.chkd_inact, screen, col, False, True) elif active: - self.parent.add_string(row,self.unchkd_act,screen,col,False,True) + self.parent.add_string(row, self.unchkd_act, screen, col, False, True) else: - self.parent.add_string(row,self.unchkd_inact,screen,col,False,True) + self.parent.add_string(row, self.unchkd_inact, screen, col, False, True) return 1 def handle_read(self, c): @@ -137,28 +137,28 @@ class CheckedPlusInput(InputField): def render(self, screen, row, width, active, col=1): isact = active and not self.child_active if self.checked and isact: - self.parent.add_string(row,self.chkd_act,screen,col,False,True) + self.parent.add_string(row, self.chkd_act, screen, col, False, True) elif self.checked: - self.parent.add_string(row,self.chkd_inact,screen,col,False,True) + self.parent.add_string(row, self.chkd_inact, screen, col, False, True) elif isact: - self.parent.add_string(row,self.unchkd_act,screen,col,False,True) + self.parent.add_string(row, self.unchkd_act, screen, col, False, True) else: - self.parent.add_string(row,self.unchkd_inact,screen,col,False,True) + self.parent.add_string(row, self.unchkd_inact, screen, col, False, True) if active and self.checked and self.child_active: - self.parent.add_string(row+1,"(esc to leave)",screen,col,False,True) + self.parent.add_string(row+1, "(esc to leave)", screen, col, False, True) elif active and self.checked: - self.parent.add_string(row+1,"(right arrow to edit)",screen,col,False,True) + self.parent.add_string(row+1, "(right arrow to edit)", screen, col, False, True) rows = 2 # show child if self.checked: - if isinstance(self.child,(TextInput,IntSpinInput,FloatSpinInput)): - crows = self.child.render(screen,row,width-self.msglen,self.child_active and active,col+self.msglen,self.msglen) + if isinstance(self.child, (TextInput, IntSpinInput, FloatSpinInput)): + crows = self.child.render(screen, row, width-self.msglen, self.child_active and active, col+self.msglen, self.msglen) else: - crows = self.child.render(screen,row,width-self.msglen,self.child_active and active,col+self.msglen) - rows = max(rows,crows) + crows = self.child.render(screen, row, width-self.msglen, self.child_active and active, col+self.msglen) + rows = max(rows, crows) else: - self.parent.add_string(row,"(enable to view/edit value)",screen,col+self.msglen,False,True) + self.parent.add_string(row, "(enable to view/edit value)", screen, col+self.msglen, False, True) return rows def handle_read(self, c): @@ -239,16 +239,16 @@ class IntSpinInput(InputField): except: self.real_value = False if not self.valstr: - self.parent.add_string(row,"%s {!input!}[ ]"%self.message,screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ ]"%self.message, screen, col, False, True) elif active: - self.parent.add_string(row,"%s {!input!}[ {!black,white,bold!}%s{!input!} ]"%(self.message,self.valstr),screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ {!black,white,bold!}%s{!input!} ]"%(self.message, self.valstr), screen, col, False, True) elif self.additional_formatting and self.valstr == self.default_str: - self.parent.add_string(row,"%s {!input!}[ {!magenta,black!}%s{!input!} ]"%(self.message,self.valstr),screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ {!magenta,black!}%s{!input!} ]"%(self.message, self.valstr), screen, col, False, True) else: - self.parent.add_string(row,"%s {!input!}[ %s ]"%(self.message,self.valstr),screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ %s ]"%(self.message, self.valstr), screen, col, False, True) if active: - self.move_func(row,self.cursor+self.cursoff+cursor_offset) + self.move_func(row, self.cursor+self.cursoff+cursor_offset) return 1 @@ -273,10 +273,10 @@ class IntSpinInput(InputField): self.cursor = len(self.valstr) elif c == curses.KEY_LEFT: if not self.real_value: return None - self.cursor = max(0,self.cursor-1) + self.cursor = max(0, self.cursor-1) elif c == curses.KEY_RIGHT: if not self.real_value: return None - self.cursor = min(len(self.valstr),self.cursor+1) + self.cursor = min(len(self.valstr), self.cursor+1) elif c == curses.KEY_HOME: if not self.real_value: return None self.cursor = 0 @@ -409,15 +409,15 @@ class FloatSpinInput(InputField): self.real_value = False if not self.valstr: - self.parent.add_string(row,"%s {!input!}[ ]"%self.message,screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ ]"%self.message, screen, col, False, True) elif active: - self.parent.add_string(row,"%s {!input!}[ {!black,white,bold!}%s{!white,black!} ]"%(self.message,self.valstr),screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ {!black,white,bold!}%s{!white,black!} ]"%(self.message, self.valstr), screen, col, False, True) elif self.additional_formatting and self.valstr == self.default_str: - self.parent.add_string(row,"%s {!input!}[ {!magenta,black!}%s{!input!} ]"%(self.message,self.valstr),screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ {!magenta,black!}%s{!input!} ]"%(self.message, self.valstr), screen, col, False, True) else: - self.parent.add_string(row,"%s {!input!}[ %s ]"%(self.message,self.valstr),screen,col,False,True) + self.parent.add_string(row, "%s {!input!}[ %s ]"%(self.message, self.valstr), screen, col, False, True) if active: - self.move_func(row,self.cursor+self.cursoff+cursor_offset) + self.move_func(row, self.cursor+self.cursoff+cursor_offset) return 1 @@ -444,10 +444,10 @@ class FloatSpinInput(InputField): self.cursor = len(self.valstr) elif c == curses.KEY_LEFT: if not self.real_value: return None - self.cursor = max(0,self.cursor-1) + self.cursor = max(0, self.cursor-1) elif c == curses.KEY_RIGHT: if not self.real_value: return None - self.cursor = min(len(self.valstr),self.cursor+1) + self.cursor = min(len(self.valstr), self.cursor+1) elif c == curses.KEY_HOME: if not self.real_value: return None self.cursor = 0 @@ -552,21 +552,21 @@ class SelectInput(InputField): def render(self, screen, row, width, selected, col=1): if self.message: - self.parent.add_string(row,self.message,screen,col,False,True) + self.parent.add_string(row, self.message, screen, col, False, True) row += 1 off = col+1 - for i,opt in enumerate(self.opts): + for i, opt in enumerate(self.opts): if selected and i == self.selidx: - self.parent.add_string(row,"{!black,white,bold!}[%s]"%opt,screen,off,False,True) + self.parent.add_string(row, "{!black,white,bold!}[%s]"%opt, screen, off, False, True) elif i == self.selidx: if self.additional_formatting and i == self.default_option: - self.parent.add_string(row,"[{!magenta,black!}%s{!white,black!}]"%opt,screen,off,False,True) + self.parent.add_string(row, "[{!magenta,black!}%s{!white,black!}]"%opt, screen, off, False, True) elif self.additional_formatting: - self.parent.add_string(row,"[{!white,blue!}%s{!white,black!}]"%opt,screen,off,False,True) + self.parent.add_string(row, "[{!white,blue!}%s{!white,black!}]"%opt, screen, off, False, True) else: - self.parent.add_string(row,"[{!white,black,underline!}%s{!white,black!}]"%opt,screen,off,False,True) + self.parent.add_string(row, "[{!white,black,underline!}%s{!white,black!}]"%opt, screen, off, False, True) else: - self.parent.add_string(row,"[%s]"%opt,screen,off,False,True) + self.parent.add_string(row, "[%s]"%opt, screen, off, False, True) off += len(opt)+3 if self.message: return 2 @@ -575,15 +575,15 @@ class SelectInput(InputField): def handle_read(self, c): if c == curses.KEY_LEFT: - self.selidx = max(0,self.selidx-1) + self.selidx = max(0, self.selidx-1) if c == curses.KEY_RIGHT: - self.selidx = min(len(self.opts)-1,self.selidx+1) + self.selidx = min(len(self.opts)-1, self.selidx+1) def get_value(self): return self.vals[self.selidx] def set_value(self, nv): - for i,val in enumerate(self.vals): + for i, val in enumerate(self.vals): if nv == val: self.selidx = i return @@ -617,15 +617,15 @@ class TextInput(InputField): self.cursor = len(self.value) if self.message: - self.parent.add_string(row,self.message,screen,col,False,True) + self.parent.add_string(row, self.message, screen, col, False, True) row += 1 if selected: if self.opts: - self.parent.add_string(row+1,self.opts[self.opt_off:],screen,col,False,True) + self.parent.add_string(row+1, self.opts[self.opt_off:], screen, col, False, True) if self.cursor > (width-3): - self.move_func(row,width-2) + self.move_func(row, width-2) else: - self.move_func(row,self.cursor+1+cursor_offset) + self.move_func(row, self.cursor+1+cursor_offset) slen = len(self.value)+3 if slen > width: vstr = self.value[(slen-width):] @@ -633,9 +633,9 @@ class TextInput(InputField): vstr = self.value.ljust(width-2) if self.additional_formatting and len(self.value) != 0 and self.value == self.default_value: - self.parent.add_string(row,"{!magenta,white!}%s"%vstr,screen,col,False,False) + self.parent.add_string(row, "{!magenta,white!}%s"%vstr, screen, col, False, False) else: - self.parent.add_string(row,"{!black,white,bold!}%s"%vstr,screen,col,False,False) + self.parent.add_string(row, "{!black,white,bold!}%s"%vstr, screen, col, False, False) if self.message: return 3 @@ -645,12 +645,12 @@ class TextInput(InputField): def get_value(self): return self.value - def set_value(self,val): + def set_value(self, val): self.value = val self.cursor = len(self.value) # most of the cursor,input stuff here taken from ui/console/screen.py - def handle_read(self,c): + def handle_read(self, c): if c == 9 and self.docmp: # Keep track of tab hit count to know when it's double-hit self.tab_count += 1 @@ -668,7 +668,7 @@ class TextInput(InputField): self.opt_off += self.width-3 # now find previous double space, best guess at a split point # in future could keep opts unjoined to get this really right - self.opt_off = self.opts.rfind(" ",0,self.opt_off)+2 + self.opt_off = self.opts.rfind(" ", 0, self.opt_off)+2 if second_hit and self.opt_off == prev: # double tap and we're at the end self.opt_off = 0 else: @@ -689,9 +689,9 @@ class TextInput(InputField): # Cursor movement elif c == curses.KEY_LEFT: - self.cursor = max(0,self.cursor-1) + self.cursor = max(0, self.cursor-1) elif c == curses.KEY_RIGHT: - self.cursor = min(len(self.value),self.cursor+1) + self.cursor = min(len(self.value), self.cursor+1) elif c == curses.KEY_HOME: self.cursor = 0 elif c == curses.KEY_END: @@ -730,7 +730,7 @@ class TextInput(InputField): self.cursor+=1 - def complete(self,line): + def complete(self, line): line = os.path.abspath(os.path.expanduser(line)) ret = [] if os.path.exists(line): @@ -773,7 +773,7 @@ class InputPopup(Popup): close_cb=None, additional_formatting=True, immediate_action=False): - Popup.__init__(self,parent_mode,title, width_req=width_req, height_req=height_req, align=align, close_cb=close_cb) + Popup.__init__(self, parent_mode, title, width_req=width_req, height_req=height_req, align=align, close_cb=close_cb) self.inputs = [] self.lines = [] self.current_input = 0 @@ -784,7 +784,7 @@ class InputPopup(Popup): #We need to replicate some things in order to wrap our inputs self.encoding = parent_mode.encoding - def move(self,r,c): + def move(self, r, c): self._cursor_row = r self._cursor_col = c @@ -826,7 +826,7 @@ class InputPopup(Popup): additional_formatting = self.additional_formatting)) def add_checked_input(self, message, name, checked=False): - self.inputs.append(CheckedInput(self,message,name,checked, + self.inputs.append(CheckedInput(self, message, name, checked, additional_formatting = self.additional_formatting)) #def add_checked_plus_input(self, message, name, child) @@ -866,12 +866,12 @@ class InputPopup(Popup): crow = 1 - self.lineoff spos = 0 - for i,ipt in enumerate(self.inputs): + for i, ipt in enumerate(self.inputs): for line in self.lines: if line[0] == i: self.add_string(crow, line[1], self.screen, 1, pad=False) crow += 1 - crow += ipt.render(self.screen,crow,self.width,i==self.current_input) + crow += ipt.render(self.screen, crow, self.width, i==self.current_input) if (self.content_height > (self.height-2)): lts = self.content_height-(self.height-3) @@ -879,16 +879,16 @@ class InputPopup(Popup): sb_pos = int((self.height-2)*perc_sc)+1 if (sb_pos == 1) and (self.lineoff != 0): sb_pos += 1 - self.add_string(sb_pos, "{!red,black,bold!}#",self.screen,col=(self.width-1),pad=False,trim=False) + self.add_string(sb_pos, "{!red,black,bold!}#", self.screen, col=(self.width-1), pad=False, trim=False) if self._cursor_row >= 0: curses.curs_set(2) - self.screen.move(self._cursor_row,self._cursor_col) + self.screen.move(self._cursor_row, self._cursor_col) def handle_read(self, c): if c == curses.KEY_UP: - self.current_input = max(0,self.current_input-1) + self.current_input = max(0, self.current_input-1) elif c == curses.KEY_DOWN: - self.current_input = min(len(self.inputs)-1,self.current_input+1) + self.current_input = min(len(self.inputs)-1, self.current_input+1) elif c == curses.KEY_ENTER or c == 10: if self.close_cb: vals = {} diff --git a/deluge/ui/console/modes/legacy.py b/deluge/ui/console/modes/legacy.py index fadaf7f21..46bd5871e 100644 --- a/deluge/ui/console/modes/legacy.py +++ b/deluge/ui/console/modes/legacy.py @@ -51,7 +51,7 @@ import deluge.configmanager from deluge.ui.console.modes import format_utils strwidth = format_utils.strwidth -import logging,os +import logging, os log = logging.getLogger(__name__) import re @@ -907,7 +907,7 @@ class Legacy(BaseMode, component.Component): # Find all possible matches for torrent_id, torrent_name in self.torrents: #Escape spaces to avoid, for example, expanding "Doc" into "Doctor Who" and removing everything containing one of these words - escaped_name = torrent_name.replace(" ","\\ ") + escaped_name = torrent_name.replace(" ", "\\ ") #If we only matched one torrent, don't add the full name or it'll also get autocompleted if match_count == 1: if torrent_id.startswith(line): diff --git a/deluge/ui/console/modes/popup.py b/deluge/ui/console/modes/popup.py index a22d45cbe..25fa9013b 100644 --- a/deluge/ui/console/modes/popup.py +++ b/deluge/ui/console/modes/popup.py @@ -102,7 +102,7 @@ class Popup: for line in self._lines[self.lineoff:]: if (crow >= self.height-1): break - self.parent.add_string(crow,line,self.screen,1,False,True) + self.parent.add_string(crow, line, self.screen, 1, False, True) crow+=1 def handle_resize(self): @@ -148,17 +148,17 @@ class Popup: elif self.align in [ALIGN.TOP_RIGHT, ALIGN.MIDDLE_RIGHT, ALIGN.BOTTOM_RIGHT]: bx = self.parent.cols - wr - 1 - self.screen = curses.newwin(hr,wr,by,bx) + self.screen = curses.newwin(hr, wr, by, bx) self.x, self.y = bx, by - self.height,self.width = self.screen.getmaxyx() + self.height, self.width = self.screen.getmaxyx() def refresh(self): self.screen.erase() - self.screen.border(0,0,0,0) + self.screen.border(0, 0, 0, 0) toff = max(1, (self.width//2) - (len(self.title)//2)) - self.parent.add_string(0,"{!white,black,bold!}%s"%self.title,self.screen,toff,False,True) + self.parent.add_string(0, "{!white,black,bold!}%s"%self.title, self.screen, toff, False, True) self._refresh_lines() if (len(self._lines) > (self.height-2)): @@ -167,7 +167,7 @@ class Popup: sb_pos = int((self.height-2)*perc_sc)+1 if (sb_pos == 1) and (self.lineoff != 0): sb_pos += 1 - self.parent.add_string(sb_pos, "{!red,black,bold!}#",self.screen,col=(self.width-1),pad=False,trim=False) + self.parent.add_string(sb_pos, "{!red,black,bold!}#", self.screen, col=(self.width-1), pad=False, trim=False) self.screen.redrawwin() self.screen.noutrefresh() @@ -178,9 +178,9 @@ class Popup: def handle_read(self, c): p_off = self.height - 3 if c == curses.KEY_UP: - self.lineoff = max(0,self.lineoff -1) + self.lineoff = max(0, self.lineoff -1) elif c == curses.KEY_PPAGE: - self.lineoff = max(0,self.lineoff - p_off) + self.lineoff = max(0, self.lineoff - p_off) elif c == curses.KEY_HOME: self.lineoff = 0 elif c == curses.KEY_DOWN: @@ -223,7 +223,7 @@ class SelectablePopup(Popup): are added. """ def __init__(self,parent_mode,title, selection_callback, args=(), align=ALIGN.DEFAULT, immediate_action=False): - Popup.__init__(self,parent_mode, title, align=align) + Popup.__init__(self, parent_mode, title, align=align) self._selection_callback = selection_callback self._selection_args = args self._selectable_lines = [] @@ -244,7 +244,7 @@ class SelectablePopup(Popup): self._udxs[len(self._lines)+1] = udx c = string[udx].lower() self._hotkeys[c] = len(self._lines) - Popup.add_line(self,string) + Popup.add_line(self, string) self._line_foregrounds.append(foreground) if selectable: self._selectable_lines.append(len(self._lines)-1) @@ -254,7 +254,7 @@ class SelectablePopup(Popup): def _refresh_lines(self): crow = 1 - for row,line in enumerate(self._lines): + for row, line in enumerate(self._lines): if (crow >= self.height-1): break if (row < self.lineoff): @@ -272,18 +272,18 @@ class SelectablePopup(Popup): if udx >= 0: ustr = "{!%s,black,underline!}"%fg if udx == 0: - self.parent.add_string(crow,"- %s%c%s%s"%(ustr,line[0],colorstr,line[1:]),self.screen,1,False,True) + self.parent.add_string(crow, "- %s%c%s%s"%(ustr, line[0], colorstr, line[1:]), self.screen, 1, False, True) elif udx > 0: # well, this is a litte gross - self.parent.add_string(crow,"- %s%s%s%c%s%s"%(colorstr,line[:udx],ustr,line[udx],colorstr,line[udx+1:]),self.screen,1,False,True) + self.parent.add_string(crow, "- %s%s%s%c%s%s"%(colorstr, line[:udx], ustr, line[udx], colorstr, line[udx+1:]), self.screen, 1, False, True) else: - self.parent.add_string(crow,"- %s%s"%(colorstr,line),self.screen,1,False,True) + self.parent.add_string(crow, "- %s%s"%(colorstr, line), self.screen, 1, False, True) crow+=1 def current_selection(self): "Returns a tuple of (selected index, selected data)" idx = self._selectable_lines.index(self._selected) - return (idx,self._select_data[idx]) + return (idx, self._select_data[idx]) def add_divider(self,color="white"): if not self.divider: @@ -354,13 +354,13 @@ class MessagePopup(Popup): def __init__(self, parent_mode, title, message, align=ALIGN.DEFAULT, width_req=0.5): self.message = message #self.width= int(parent_mode.cols/2) - Popup.__init__(self,parent_mode, title, align=align, width_req=width_req) - lns = format_utils.wrap_string(self.message,self.width-2,3,True) - self.height_req = min(len(lns)+2,int(parent_mode.rows*2/3)) + Popup.__init__(self, parent_mode, title, align=align, width_req=width_req) + lns = format_utils.wrap_string(self.message, self.width-2, 3, True) + self.height_req = min(len(lns)+2, int(parent_mode.rows*2/3)) self.handle_resize() self._lines = lns def handle_resize(self): Popup.handle_resize(self) self.clear() - self._lines = format_utils.wrap_string(self.message,self.width-2,3,True) + self._lines = format_utils.wrap_string(self.message, self.width-2, 3, True) diff --git a/deluge/ui/console/modes/preference_panes.py b/deluge/ui/console/modes/preference_panes.py index 87a93b0ea..847b6fbd7 100644 --- a/deluge/ui/console/modes/preference_panes.py +++ b/deluge/ui/console/modes/preference_panes.py @@ -33,7 +33,7 @@ # # -from deluge.ui.console.modes.input_popup import TextInput,SelectInput,CheckedInput,IntSpinInput,FloatSpinInput,CheckedPlusInput +from deluge.ui.console.modes.input_popup import TextInput, SelectInput, CheckedInput, IntSpinInput, FloatSpinInput, CheckedPlusInput import deluge.ui.console.modes.alltorrents from deluge.common import is_ip @@ -63,28 +63,28 @@ class Header(NoInput): if self.space_above: row += 1 rows += 1 - self.parent.add_string(row,self.header,screen,offset-1,False,True) + self.parent.add_string(row, self.header, screen, offset-1, False, True) if self.space_below: rows += 1 return rows class InfoField(NoInput): - def __init__(self,parent,label,value,name): + def __init__(self, parent, label, value, name): self.parent = parent self.label = label self.value = value - self.txt = "%s %s"%(label,value) + self.txt = "%s %s"%(label, value) self.name = name def render(self, screen, row, width, active, offset): - self.parent.add_string(row,self.txt,screen,offset-1,False,True) + self.parent.add_string(row, self.txt, screen, offset-1, False, True) return 1 def set_value(self, v): self.value = v if type(v) == float: - self.txt = "%s %.2f"%(self.label,self.value) + self.txt = "%s %.2f"%(self.label, self.value) else: - self.txt = "%s %s"%(self.label,self.value) + self.txt = "%s %s"%(self.label, self.value) class BasePane: def __init__(self, offset, parent, width): @@ -97,22 +97,22 @@ class BasePane: # have we scrolled down in the list self.input_offset = 0 - def move(self,r,c): + def move(self, r, c): self._cursor_row = r self._cursor_col = c - def add_config_values(self,conf_dict): + def add_config_values(self, conf_dict): for ipt in self.inputs: - if not isinstance(ipt,NoInput): + if not isinstance(ipt, NoInput): # gross, have to special case in/out ports since they are tuples if ipt.name in ("listen_ports_to", "listen_ports_from", "out_ports_from", "out_ports_to", "i2p_port", "i2p_hostname", "proxy_type", "proxy_username", "proxy_hostnames", "proxy_password", "proxy_hostname", "proxy_port", "proxy_peer_connections", "listen_interface"): if ipt.name == "listen_ports_to": - conf_dict["listen_ports"] = (self.infrom.get_value(),self.into.get_value()) + conf_dict["listen_ports"] = (self.infrom.get_value(), self.into.get_value()) elif ipt.name == "out_ports_to": - conf_dict["outgoing_ports"] = (self.outfrom.get_value(),self.outto.get_value()) + conf_dict["outgoing_ports"] = (self.outfrom.get_value(), self.outto.get_value()) elif ipt.name == "listen_interface": interface = ipt.get_value().strip() if is_ip(interface) or not interface: @@ -139,18 +139,18 @@ class BasePane: else: conf_dict[ipt.name] = ipt.get_value() - if hasattr(ipt,"get_child"): + if hasattr(ipt, "get_child"): c = ipt.get_child() conf_dict[c.name] = c.get_value() def update_values(self, conf_dict): for ipt in self.inputs: - if not isinstance(ipt,NoInput): + if not isinstance(ipt, NoInput): try: ipt.set_value(conf_dict[ipt.name]) except KeyError: # just ignore if it's not in dict pass - if hasattr(ipt,"get_child"): + if hasattr(ipt, "get_child"): try: c = ipt.get_child() c.set_value(conf_dict[c.name]) @@ -160,13 +160,13 @@ class BasePane: def render(self, mode, screen, width, active): self._cursor_row = -1 if self.active_input < 0: - for i,ipt in enumerate(self.inputs): - if not isinstance(ipt,NoInput): + for i, ipt in enumerate(self.inputs): + if not isinstance(ipt, NoInput): self.active_input = i break drew_act = not active crow = 1 - for i,ipt in enumerate(self.inputs): + for i, ipt in enumerate(self.inputs): if ipt.depend_skip() or i= (mode.prefs_height): break @@ -186,19 +186,19 @@ class BasePane: if active and self._cursor_row >= 0: curses.curs_set(2) - screen.move(self._cursor_row,self._cursor_col+self.offset-1) + screen.move(self._cursor_row, self._cursor_col+self.offset-1) else: curses.curs_set(0) return crow # just handles setting the active input - def handle_read(self,c): + def handle_read(self, c): if not self.inputs: # no inputs added yet return if c == curses.KEY_UP: - nc = max(0,self.active_input-1) + nc = max(0, self.active_input-1) while isinstance(self.inputs[nc], NoInput) or self.inputs[nc].depend_skip(): nc-=1 if nc <= 0: break @@ -206,7 +206,7 @@ class BasePane: self.active_input = nc elif c == curses.KEY_DOWN: ilen = len(self.inputs) - nc = min(self.active_input+1,ilen-1) + nc = min(self.active_input+1, ilen-1) while isinstance(self.inputs[nc], NoInput) or self.inputs[nc].depend_skip(): nc+=1 if nc >= ilen: @@ -225,50 +225,50 @@ class BasePane: self.inputs.append(InfoField(self.parent, label, value, name)) def add_text_input(self, name, msg, dflt_val): - self.inputs.append(TextInput(self.parent,self.move,self.width,msg,name,dflt_val,False)) + self.inputs.append(TextInput(self.parent, self.move, self.width, msg, name, dflt_val, False)) def add_select_input(self, name, msg, opts, vals, selidx): - self.inputs.append(SelectInput(self.parent,msg,name,opts,vals,selidx)) + self.inputs.append(SelectInput(self.parent, msg, name, opts, vals, selidx)) def add_checked_input(self, name, message, checked): - self.inputs.append(CheckedInput(self.parent,message,name,checked)) + self.inputs.append(CheckedInput(self.parent, message, name, checked)) def add_checkedplus_input(self, name, message, child, checked): - self.inputs.append(CheckedPlusInput(self.parent,message,name,child,checked)) + self.inputs.append(CheckedPlusInput(self.parent, message, name, child, checked)) def add_int_spin_input(self, name, message, value, min_val, max_val): - self.inputs.append(IntSpinInput(self.parent,message,name,self.move,value,min_val,max_val)) + self.inputs.append(IntSpinInput(self.parent, message, name, self.move, value, min_val, max_val)) def add_float_spin_input(self, name, message, value, inc_amt, precision, min_val, max_val): - self.inputs.append(FloatSpinInput(self.parent,message,name,self.move,value,inc_amt,precision,min_val,max_val)) + self.inputs.append(FloatSpinInput(self.parent, message, name, self.move, value, inc_amt, precision, min_val, max_val)) class InterfacePane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("General options", False) - self.add_checked_input("ring_bell","Ring system bell when a download finishes",parent.console_config["ring_bell"]) + self.add_checked_input("ring_bell", "Ring system bell when a download finishes", parent.console_config["ring_bell"]) self.add_header("New Console UI", True) - self.add_checked_input("separate_complete","List complete torrents after incomplete regardless of sorting order",parent.console_config["separate_complete"]) - self.add_checked_input("move_selection","Move selection when moving torrents in the queue",parent.console_config["move_selection"]) + self.add_checked_input("separate_complete", "List complete torrents after incomplete regardless of sorting order", parent.console_config["separate_complete"]) + self.add_checked_input("move_selection", "Move selection when moving torrents in the queue", parent.console_config["move_selection"]) self.add_header("Legacy Mode", True) - self.add_checked_input("ignore_duplicate_lines","Do not store duplicate input in history",parent.console_config["ignore_duplicate_lines"]) - self.add_checked_input("save_legacy_history","Store and load command line history in Legacy mode",parent.console_config["save_legacy_history"]) + self.add_checked_input("ignore_duplicate_lines", "Do not store duplicate input in history", parent.console_config["ignore_duplicate_lines"]) + self.add_checked_input("save_legacy_history", "Store and load command line history in Legacy mode", parent.console_config["save_legacy_history"]) self.add_header("", False) - self.add_checked_input("third_tab_lists_all","Third tab lists all remaining torrents in legacy mode",parent.console_config["third_tab_lists_all"]) - self.add_int_spin_input("torrents_per_tab_press","Torrents per tab press",parent.console_config["torrents_per_tab_press"], 5, 100) + self.add_checked_input("third_tab_lists_all", "Third tab lists all remaining torrents in legacy mode", parent.console_config["third_tab_lists_all"]) + self.add_int_spin_input("torrents_per_tab_press", "Torrents per tab press", parent.console_config["torrents_per_tab_press"], 5, 100) class ColumnsPane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("Columns To Display", True) default_prefs = deluge.ui.console.modes.alltorrents.DEFAULT_PREFS @@ -282,29 +282,29 @@ class ColumnsPane(BasePane): self.add_checked_input(pn, deluge.ui.console.modes.alltorrents.prefs_to_names[cpn], parent.console_config[pn]) - self.add_header("Column Widths (-1 = expand)",True) + self.add_header("Column Widths (-1 = expand)", True) for cpn in deluge.ui.console.modes.alltorrents.column_pref_names: pn = "%s_width"%cpn if pn not in default_prefs: continue self.add_int_spin_input(pn, deluge.ui.console.modes.alltorrents.prefs_to_names[cpn], - parent.console_config[pn],-1,100) + parent.console_config[pn], -1, 100) class DownloadsPane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("Folders") - self.add_text_input("download_location","Download To:",parent.core_config["download_location"]) - cmptxt = TextInput(self.parent,self.move,self.width,None,"move_completed_path",parent.core_config["move_completed_path"],False) - self.add_checkedplus_input("move_completed","Move completed to:",cmptxt,parent.core_config["move_completed"]) - copytxt = TextInput(self.parent,self.move,self.width,None,"torrentfiles_location",parent.core_config["torrentfiles_location"],False) - self.add_checkedplus_input("copy_torrent_file","Copy of .torrent files to:",copytxt,parent.core_config["copy_torrent_file"]) - self.add_checked_input("del_copy_torrent_file","Delete copy of torrent file on remove",parent.core_config["del_copy_torrent_file"]) + self.add_text_input("download_location", "Download To:", parent.core_config["download_location"]) + cmptxt = TextInput(self.parent, self.move, self.width, None, "move_completed_path", parent.core_config["move_completed_path"], False) + self.add_checkedplus_input("move_completed", "Move completed to:", cmptxt, parent.core_config["move_completed"]) + copytxt = TextInput(self.parent, self.move, self.width, None, "torrentfiles_location", parent.core_config["torrentfiles_location"], False) + self.add_checkedplus_input("copy_torrent_file", "Copy of .torrent files to:", copytxt, parent.core_config["copy_torrent_file"]) + self.add_checked_input("del_copy_torrent_file", "Delete copy of torrent file on remove", parent.core_config["del_copy_torrent_file"]) - self.add_header("Options",True) + self.add_header("Options", True) self.add_checked_input("prioritize_first_last_pieces", "Prioritize first and last pieces of torrent", parent.core_config["prioritize_first_last_pieces"]) self.add_checked_input("sequential_download", "", @@ -316,108 +316,108 @@ class DownloadsPane(BasePane): class NetworkPane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("Incomming Ports") - inrand = CheckedInput(parent,"Use Random Ports Active Port: %d"%parent.active_port,"random_port",parent.core_config["random_port"]) + inrand = CheckedInput(parent, "Use Random Ports Active Port: %d"%parent.active_port, "random_port", parent.core_config["random_port"]) self.inputs.append(inrand) listen_ports = parent.core_config["listen_ports"] - self.infrom = IntSpinInput(self.parent," From:","listen_ports_from",self.move,listen_ports[0],0,65535) - self.infrom.set_depend(inrand,True) - self.into = IntSpinInput(self.parent," To: ","listen_ports_to",self.move,listen_ports[1],0,65535) - self.into.set_depend(inrand,True) + self.infrom = IntSpinInput(self.parent, " From:", "listen_ports_from", self.move, listen_ports[0], 0, 65535) + self.infrom.set_depend(inrand, True) + self.into = IntSpinInput(self.parent, " To: ", "listen_ports_to", self.move, listen_ports[1], 0, 65535) + self.into.set_depend(inrand, True) self.inputs.append(self.infrom) self.inputs.append(self.into) - self.add_header("Outgoing Ports",True) - outrand = CheckedInput(parent,"Use Random Ports","random_outgoing_ports",parent.core_config["random_outgoing_ports"]) + self.add_header("Outgoing Ports", True) + outrand = CheckedInput(parent, "Use Random Ports", "random_outgoing_ports", parent.core_config["random_outgoing_ports"]) self.inputs.append(outrand) out_ports = parent.core_config["outgoing_ports"] - self.outfrom = IntSpinInput(self.parent," From:","out_ports_from",self.move,out_ports[0],0,65535) - self.outfrom.set_depend(outrand,True) - self.outto = IntSpinInput(self.parent," To: ","out_ports_to",self.move,out_ports[1],0,65535) - self.outto.set_depend(outrand,True) + self.outfrom = IntSpinInput(self.parent, " From:", "out_ports_from", self.move, out_ports[0], 0, 65535) + self.outfrom.set_depend(outrand, True) + self.outto = IntSpinInput(self.parent, " To: ", "out_ports_to", self.move, out_ports[1], 0, 65535) + self.outto.set_depend(outrand, True) self.inputs.append(self.outfrom) self.inputs.append(self.outto) - self.add_header("Interface",True) - self.add_text_input("listen_interface","IP address of the interface to listen on (leave empty for default):",parent.core_config["listen_interface"]) + self.add_header("Interface", True) + self.add_text_input("listen_interface", "IP address of the interface to listen on (leave empty for default):", parent.core_config["listen_interface"]) - self.add_header("TOS",True) - self.add_text_input("peer_tos","Peer TOS Byte:",parent.core_config["peer_tos"]) + self.add_header("TOS", True) + self.add_text_input("peer_tos", "Peer TOS Byte:", parent.core_config["peer_tos"]) self.add_header("Network Extras") - self.add_checked_input("upnp","UPnP",parent.core_config["upnp"]) - self.add_checked_input("natpmp","NAT-PMP",parent.core_config["natpmp"]) - self.add_checked_input("utpex","Peer Exchange",parent.core_config["utpex"]) - self.add_checked_input("lt_tex","Tracker Exchange",parent.core_config["lt_tex"]) - self.add_checked_input("lsd","LSD",parent.core_config["lsd"]) - self.add_checked_input("dht","DHT",parent.core_config["dht"]) + self.add_checked_input("upnp", "UPnP", parent.core_config["upnp"]) + self.add_checked_input("natpmp", "NAT-PMP", parent.core_config["natpmp"]) + self.add_checked_input("utpex", "Peer Exchange", parent.core_config["utpex"]) + self.add_checked_input("lt_tex", "Tracker Exchange", parent.core_config["lt_tex"]) + self.add_checked_input("lsd", "LSD", parent.core_config["lsd"]) + self.add_checked_input("dht", "DHT", parent.core_config["dht"]) - self.add_header("Encryption",True) - self.add_select_input("enc_in_policy","Inbound:",["Forced","Enabled","Disabled"],[0,1,2],parent.core_config["enc_in_policy"]) - self.add_select_input("enc_out_policy","Outbound:",["Forced","Enabled","Disabled"],[0,1,2],parent.core_config["enc_out_policy"]) - self.add_select_input("enc_level","Level:",["Handshake","Full Stream","Either"],[0,1,2],parent.core_config["enc_level"]) + self.add_header("Encryption", True) + self.add_select_input("enc_in_policy", "Inbound:", ["Forced", "Enabled", "Disabled"], [0, 1, 2], parent.core_config["enc_in_policy"]) + self.add_select_input("enc_out_policy", "Outbound:", ["Forced", "Enabled", "Disabled"], [0, 1, 2], parent.core_config["enc_out_policy"]) + self.add_select_input("enc_level", "Level:", ["Handshake", "Full Stream", "Either"], [0, 1, 2], parent.core_config["enc_level"]) class BandwidthPane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("Global Bandwidth Usage") - self.add_int_spin_input("max_connections_global","Maximum Connections:",parent.core_config["max_connections_global"],-1,9000) - self.add_int_spin_input("max_upload_slots_global","Maximum Upload Slots:",parent.core_config["max_upload_slots_global"],-1,9000) - self.add_float_spin_input("max_download_speed","Maximum Download Speed (KiB/s):",parent.core_config["max_download_speed"],1.0,1,-1.0,60000.0) - self.add_float_spin_input("max_upload_speed","Maximum Upload Speed (KiB/s):",parent.core_config["max_upload_speed"],1.0,1,-1.0,60000.0) - self.add_int_spin_input("max_half_open_connections","Maximum Half-Open Connections:",parent.core_config["max_half_open_connections"],-1,9999) - self.add_int_spin_input("max_connections_per_second","Maximum Connection Attempts per Second:",parent.core_config["max_connections_per_second"],-1,9999) - self.add_checked_input("ignore_limits_on_local_network","Ignore limits on local network",parent.core_config["ignore_limits_on_local_network"]) - self.add_checked_input("rate_limit_ip_overhead","Rate Limit IP Overhead",parent.core_config["rate_limit_ip_overhead"]) - self.add_header("Per Torrent Bandwidth Usage",True) - self.add_int_spin_input("max_connections_per_torrent","Maximum Connections:",parent.core_config["max_connections_per_torrent"],-1,9000) - self.add_int_spin_input("max_upload_slots_per_torrent","Maximum Upload Slots:",parent.core_config["max_upload_slots_per_torrent"],-1,9000) - self.add_float_spin_input("max_download_speed_per_torrent","Maximum Download Speed (KiB/s):",parent.core_config["max_download_speed_per_torrent"],1.0,1,-1.0,60000.0) - self.add_float_spin_input("max_upload_speed_per_torrent","Maximum Upload Speed (KiB/s):",parent.core_config["max_upload_speed_per_torrent"],1.0,1,-1.0,60000.0) + self.add_int_spin_input("max_connections_global", "Maximum Connections:", parent.core_config["max_connections_global"], -1, 9000) + self.add_int_spin_input("max_upload_slots_global", "Maximum Upload Slots:", parent.core_config["max_upload_slots_global"], -1, 9000) + self.add_float_spin_input("max_download_speed", "Maximum Download Speed (KiB/s):", parent.core_config["max_download_speed"], 1.0, 1, -1.0, 60000.0) + self.add_float_spin_input("max_upload_speed", "Maximum Upload Speed (KiB/s):", parent.core_config["max_upload_speed"], 1.0, 1, -1.0, 60000.0) + self.add_int_spin_input("max_half_open_connections", "Maximum Half-Open Connections:", parent.core_config["max_half_open_connections"], -1, 9999) + self.add_int_spin_input("max_connections_per_second", "Maximum Connection Attempts per Second:", parent.core_config["max_connections_per_second"], -1, 9999) + self.add_checked_input("ignore_limits_on_local_network", "Ignore limits on local network", parent.core_config["ignore_limits_on_local_network"]) + self.add_checked_input("rate_limit_ip_overhead", "Rate Limit IP Overhead", parent.core_config["rate_limit_ip_overhead"]) + self.add_header("Per Torrent Bandwidth Usage", True) + self.add_int_spin_input("max_connections_per_torrent", "Maximum Connections:", parent.core_config["max_connections_per_torrent"], -1, 9000) + self.add_int_spin_input("max_upload_slots_per_torrent", "Maximum Upload Slots:", parent.core_config["max_upload_slots_per_torrent"], -1, 9000) + self.add_float_spin_input("max_download_speed_per_torrent", "Maximum Download Speed (KiB/s):", parent.core_config["max_download_speed_per_torrent"], 1.0, 1, -1.0, 60000.0) + self.add_float_spin_input("max_upload_speed_per_torrent", "Maximum Upload Speed (KiB/s):", parent.core_config["max_upload_speed_per_torrent"], 1.0, 1, -1.0, 60000.0) class OtherPane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("System Information") - self.add_info_field(" Help us improve Deluge by sending us your","","") - self.add_info_field(" Python version, PyGTK version, OS and processor","","") - self.add_info_field(" types. Absolutely no other information is sent.","","") - self.add_checked_input("send_info","Yes, please send anonymous statistics.",parent.core_config["send_info"]) - self.add_header("GeoIP Database",True) - self.add_text_input("geoip_db_location","Location:",parent.core_config["geoip_db_location"]) + self.add_info_field(" Help us improve Deluge by sending us your", "", "") + self.add_info_field(" Python version, PyGTK version, OS and processor", "", "") + self.add_info_field(" types. Absolutely no other information is sent.", "", "") + self.add_checked_input("send_info", "Yes, please send anonymous statistics.", parent.core_config["send_info"]) + self.add_header("GeoIP Database", True) + self.add_text_input("geoip_db_location", "Location:", parent.core_config["geoip_db_location"]) class DaemonPane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("Port") - self.add_int_spin_input("daemon_port","Daemon Port:",parent.core_config["daemon_port"],0,65535) - self.add_header("Connections",True) - self.add_checked_input("allow_remote","Allow remote connections",parent.core_config["allow_remote"]) - self.add_header("Other",True) - self.add_checked_input("new_release_check","Periodically check the website for new releases",parent.core_config["new_release_check"]) + self.add_int_spin_input("daemon_port", "Daemon Port:", parent.core_config["daemon_port"], 0, 65535) + self.add_header("Connections", True) + self.add_checked_input("allow_remote", "Allow remote connections", parent.core_config["allow_remote"]) + self.add_header("Other", True) + self.add_checked_input("new_release_check", "Periodically check the website for new releases", parent.core_config["new_release_check"]) class QueuePane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("General") - self.add_checked_input("queue_new_to_top","Queue new torrents to top",parent.core_config["queue_new_to_top"]) - self.add_header("Active Torrents",True) - self.add_int_spin_input("max_active_limit","Total active:",parent.core_config["max_active_limit"],-1,9999) - self.add_int_spin_input("max_active_downloading","Total active downloading:",parent.core_config["max_active_downloading"],-1,9999) - self.add_int_spin_input("max_active_seeding","Total active seeding:",parent.core_config["max_active_seeding"],-1,9999) - self.add_checked_input("dont_count_slow_torrents","Do not count slow torrents",parent.core_config["dont_count_slow_torrents"]) - self.add_checked_input("auto_manage_prefer_seeds","Prefer Seeding over Downloading",parent.core_config["auto_manage_prefer_seeds"]) - self.add_header("Seeding",True) - self.add_float_spin_input("share_ratio_limit","Share Ratio Limit:",parent.core_config["share_ratio_limit"],1.0,2,-1.0,100.0) - self.add_float_spin_input("seed_time_ratio_limit","Share Time Ratio:",parent.core_config["seed_time_ratio_limit"],1.0,2,-1.0,100.0) - self.add_int_spin_input("seed_time_limit","Seed time (m):",parent.core_config["seed_time_limit"],-1,10000) - seedratio = FloatSpinInput(self.parent,"","stop_seed_ratio",self.move,parent.core_config["stop_seed_ratio"],0.1,2,0.5,100.0) - self.add_checkedplus_input("stop_seed_at_ratio","Stop seeding when share ratio reaches:",seedratio,parent.core_config["stop_seed_at_ratio"]) - self.add_checked_input("remove_seed_at_ratio","Remove torrent when share ratio reached",parent.core_config["remove_seed_at_ratio"]) + self.add_checked_input("queue_new_to_top", "Queue new torrents to top", parent.core_config["queue_new_to_top"]) + self.add_header("Active Torrents", True) + self.add_int_spin_input("max_active_limit", "Total active:", parent.core_config["max_active_limit"], -1, 9999) + self.add_int_spin_input("max_active_downloading", "Total active downloading:", parent.core_config["max_active_downloading"], -1, 9999) + self.add_int_spin_input("max_active_seeding", "Total active seeding:", parent.core_config["max_active_seeding"], -1, 9999) + self.add_checked_input("dont_count_slow_torrents", "Do not count slow torrents", parent.core_config["dont_count_slow_torrents"]) + self.add_checked_input("auto_manage_prefer_seeds", "Prefer Seeding over Downloading", parent.core_config["auto_manage_prefer_seeds"]) + self.add_header("Seeding", True) + self.add_float_spin_input("share_ratio_limit", "Share Ratio Limit:", parent.core_config["share_ratio_limit"], 1.0, 2, -1.0, 100.0) + self.add_float_spin_input("seed_time_ratio_limit", "Share Time Ratio:", parent.core_config["seed_time_ratio_limit"], 1.0, 2, -1.0, 100.0) + self.add_int_spin_input("seed_time_limit", "Seed time (m):", parent.core_config["seed_time_limit"], -1, 10000) + seedratio = FloatSpinInput(self.parent, "", "stop_seed_ratio", self.move, parent.core_config["stop_seed_ratio"], 0.1, 2, 0.5, 100.0) + self.add_checkedplus_input("stop_seed_at_ratio", "Stop seeding when share ratio reaches:", seedratio, parent.core_config["stop_seed_at_ratio"]) + self.add_checked_input("remove_seed_at_ratio", "Remove torrent when share ratio reached", parent.core_config["remove_seed_at_ratio"]) class ProxyPane(BasePane): def __init__(self, offset, parent, width): @@ -425,7 +425,7 @@ class ProxyPane(BasePane): self.add_header("Proxy Settings") self.add_header("Proxy", True) proxy = parent.core_config["proxy"] - self.add_int_spin_input("proxy_type","Type:", proxy["type"],0,5) + self.add_int_spin_input("proxy_type", "Type:", proxy["type"], 0, 5) self.add_info_field(" 0: None 1: Socks4 2: Socks5", "", "") self.add_info_field(" 3: Socks5 Auth 4: HTTP 5: HTTP Auth", "", "") self.add_text_input("proxy_username", "Username:", proxy["username"]) @@ -435,7 +435,7 @@ class ProxyPane(BasePane): self.add_checked_input("proxy_hostnames", "Proxy hostnames", proxy["proxy_hostnames"]) self.add_checked_input("proxy_peer_connections", "Proxy peer connections", proxy["proxy_peer_connections"]) - self.add_header("I2P Proxy",True) + self.add_header("I2P Proxy", True) i2p_proxy = parent.core_config["i2p_proxy"] self.add_text_input("i2p_hostname", "Hostname:", i2p_proxy["hostname"]) self.add_int_spin_input("i2p_port", "Port:", i2p_proxy["port"], 0, 65535) @@ -444,27 +444,27 @@ class ProxyPane(BasePane): class CachePane(BasePane): def __init__(self, offset, parent, width): - BasePane.__init__(self,offset,parent,width) + BasePane.__init__(self, offset, parent, width) self.add_header("Settings") - self.add_int_spin_input("cache_size","Cache Size (16 KiB blocks):",parent.core_config["cache_size"],0,99999) - self.add_int_spin_input("cache_expiry","Cache Expiry (seconds):",parent.core_config["cache_expiry"],1,32000) - self.add_header("Status (press 'r' to refresh status)",True) + self.add_int_spin_input("cache_size", "Cache Size (16 KiB blocks):", parent.core_config["cache_size"], 0, 99999) + self.add_int_spin_input("cache_expiry", "Cache Expiry (seconds):", parent.core_config["cache_expiry"], 1, 32000) + self.add_header("Status (press 'r' to refresh status)", True) self.add_header(" Write") - self.add_info_field(" Blocks Written:",self.parent.status["blocks_written"],"blocks_written") - self.add_info_field(" Writes:",self.parent.status["writes"],"writes") - self.add_info_field(" Write Cache Hit Ratio:","%.2f"%self.parent.status["write_hit_ratio"],"write_hit_ratio") + self.add_info_field(" Blocks Written:", self.parent.status["blocks_written"], "blocks_written") + self.add_info_field(" Writes:", self.parent.status["writes"], "writes") + self.add_info_field(" Write Cache Hit Ratio:", "%.2f"%self.parent.status["write_hit_ratio"], "write_hit_ratio") self.add_header(" Read") - self.add_info_field(" Blocks Read:",self.parent.status["blocks_read"],"blocks_read") - self.add_info_field(" Blocks Read hit:",self.parent.status["blocks_read_hit"],"blocks_read_hit") - self.add_info_field(" Reads:",self.parent.status["reads"],"reads") - self.add_info_field(" Read Cache Hit Ratio:","%.2f"%self.parent.status["read_hit_ratio"],"read_hit_ratio") + self.add_info_field(" Blocks Read:", self.parent.status["blocks_read"], "blocks_read") + self.add_info_field(" Blocks Read hit:", self.parent.status["blocks_read_hit"], "blocks_read_hit") + self.add_info_field(" Reads:", self.parent.status["reads"], "reads") + self.add_info_field(" Read Cache Hit Ratio:", "%.2f"%self.parent.status["read_hit_ratio"], "read_hit_ratio") self.add_header(" Size") - self.add_info_field(" Cache Size:",self.parent.status["cache_size"],"cache_size") - self.add_info_field(" Read Cache Size:",self.parent.status["read_cache_size"],"read_cache_size") + self.add_info_field(" Cache Size:", self.parent.status["cache_size"], "cache_size") + self.add_info_field(" Read Cache Size:", self.parent.status["read_cache_size"], "read_cache_size") def update_cache_status(self, status): for ipt in self.inputs: - if isinstance(ipt,InfoField): + if isinstance(ipt, InfoField): try: ipt.set_value(status[ipt.name]) except KeyError: diff --git a/deluge/ui/console/modes/preferences.py b/deluge/ui/console/modes/preferences.py index 893c65d00..cbbcb1db5 100644 --- a/deluge/ui/console/modes/preferences.py +++ b/deluge/ui/console/modes/preferences.py @@ -130,7 +130,7 @@ class Preferences(BaseMode): # create the panes self.__calc_sizes() - self.action_input = SelectInput(self,None,None,["Cancel","Apply","OK"],[0,1,2],0) + self.action_input = SelectInput(self, None, None, ["Cancel", "Apply", "OK"], [0, 1, 2], 0) self.refresh() def __calc_sizes(self): @@ -151,22 +151,22 @@ class Preferences(BaseMode): ] def __draw_catetories(self): - for i,category in enumerate(self.categories): + for i, category in enumerate(self.categories): if i == self.cur_cat and self.active_zone == ZONE.CATEGORIES: - self.add_string(i+1,"- {!black,white,bold!}%s"%category,pad=False) + self.add_string(i+1, "- {!black,white,bold!}%s"%category, pad=False) elif i == self.cur_cat: - self.add_string(i+1,"- {!black,white!}%s"%category,pad=False) + self.add_string(i+1, "- {!black,white!}%s"%category, pad=False) else: - self.add_string(i+1,"- %s"%category) - self.stdscr.vline(1,self.div_off,'|',self.rows-2) + self.add_string(i+1, "- %s"%category) + self.stdscr.vline(1, self.div_off, '|', self.rows-2) def __draw_preferences(self): - self.panes[self.cur_cat].render(self,self.stdscr, self.prefs_width, self.active_zone == ZONE.PREFRENCES) + self.panes[self.cur_cat].render(self, self.stdscr, self.prefs_width, self.active_zone == ZONE.PREFRENCES) def __draw_actions(self): selected = self.active_zone == ZONE.ACTIONS - self.stdscr.hline(self.rows-3,self.div_off+1,"_",self.cols) - self.action_input.render(self.stdscr,self.rows-2,self.cols,selected,self.cols-22) + self.stdscr.hline(self.rows-3, self.div_off+1, "_", self.cols) + self.action_input.render(self.stdscr, self.rows-2, self.cols, selected, self.cols-22) def on_resize(self, *args): BaseMode.on_resize_norefresh(self, *args) @@ -180,13 +180,13 @@ class Preferences(BaseMode): def refresh(self): if self.popup == None and self.messages: - title,msg = self.messages.popleft() - self.popup = MessagePopup(self,title,msg) + title, msg = self.messages.popleft() + self.popup = MessagePopup(self, title, msg) self.stdscr.erase() - self.add_string(0,self.statusbars.topbar) + self.add_string(0, self.statusbars.topbar) hstr = "%sPress [h] for help"%(" "*(self.cols - len(self.statusbars.bottombar) - 10)) - self.add_string(self.rows - 1, "%s%s"%(self.statusbars.bottombar,hstr)) + self.add_string(self.rows - 1, "%s%s"%(self.statusbars.bottombar, hstr)) self.__draw_catetories() self.__draw_actions() @@ -207,9 +207,9 @@ class Preferences(BaseMode): def __category_read(self, c): # Navigate prefs if c == curses.KEY_UP: - self.cur_cat = max(0,self.cur_cat-1) + self.cur_cat = max(0, self.cur_cat-1) elif c == curses.KEY_DOWN: - self.cur_cat = min(len(self.categories)-1,self.cur_cat+1) + self.cur_cat = min(len(self.categories)-1, self.cur_cat+1) def __prefs_read(self, c): self.panes[self.cur_cat].handle_read(c) @@ -217,7 +217,7 @@ class Preferences(BaseMode): def __apply_prefs(self): new_core_config = {} for pane in self.panes: - if not isinstance(pane,InterfacePane) and not isinstance(pane, ColumnsPane): + if not isinstance(pane, InterfacePane) and not isinstance(pane, ColumnsPane): pane.add_config_values(new_core_config) # Apply Core Prefs if client.connected(): @@ -241,7 +241,7 @@ class Preferences(BaseMode): for pane in self.panes: # could just access panes by index, but that would break if panes # are ever reordered, so do it the slightly slower but safer way - if isinstance(pane,InterfacePane) or isinstance(pane, ColumnsPane): + if isinstance(pane, InterfacePane) or isinstance(pane, ColumnsPane): pane.add_config_values(new_console_config) for key in new_console_config.keys(): # The values do not match so this needs to be updated @@ -254,7 +254,7 @@ class Preferences(BaseMode): self.parent_mode.update_config() - def __update_preferences(self,core_config): + def __update_preferences(self, core_config): self.core_config = core_config for pane in self.panes: pane.update_values(core_config) @@ -298,7 +298,7 @@ class Preferences(BaseMode): reactor.stop() return elif chr(c) == 'h': - self.popup = Popup(self,"Preferences Help") + self.popup = Popup(self, "Preferences Help") for l in HELP_LINES: self.popup.add_line(l) @@ -313,7 +313,7 @@ class Preferences(BaseMode): if self.active_zone < ZONE.CATEGORIES: self.active_zone = ZONE.ACTIONS - elif c == 114 and isinstance(self.panes[self.cur_cat],CachePane): + elif c == 114 and isinstance(self.panes[self.cur_cat], CachePane): client.core.get_cache_status().addCallback(self.panes[self.cur_cat].update_cache_status) else: diff --git a/deluge/ui/console/modes/torrent_actions.py b/deluge/ui/console/modes/torrent_actions.py index f26d74944..cbf567471 100644 --- a/deluge/ui/console/modes/torrent_actions.py +++ b/deluge/ui/console/modes/torrent_actions.py @@ -91,21 +91,21 @@ class ACTION: QUEUE_BOTTOM=14 TORRENT_OPTIONS=15 -def action_error(error,mode): +def action_error(error, mode): rerr = error.value - mode.report_message("An Error Occurred","%s got error %s: %s"%(rerr.method,rerr.exception_type,rerr.exception_msg)) + mode.report_message("An Error Occurred", "%s got error %s: %s"%(rerr.method, rerr.exception_type, rerr.exception_msg)) mode.refresh() def torrent_action(idx, data, mode, ids): if ids: if data==ACTION.PAUSE: - log.debug("Pausing torrents: %s",ids) - client.core.pause_torrent(ids).addErrback(action_error,mode) + log.debug("Pausing torrents: %s", ids) + client.core.pause_torrent(ids).addErrback(action_error, mode) elif data==ACTION.RESUME: log.debug("Resuming torrents: %s", ids) - client.core.resume_torrent(ids).addErrback(action_error,mode) + client.core.resume_torrent(ids).addErrback(action_error, mode) elif data==ACTION.QUEUE: - def do_queue(idx,qact,mode,ids): + def do_queue(idx, qact, mode, ids): def move_selection(r): if mode.config["move_selection"]: queue_length = 0 @@ -153,11 +153,11 @@ def torrent_action(idx, data, mode, ids): if len(ids) == 1: mode.clear_marks() return True - popup = SelectablePopup(mode,"Queue Action", do_queue, (mode, ids)) - popup.add_line("_Top",data=ACTION.QUEUE_TOP) - popup.add_line("_Up",data=ACTION.QUEUE_UP) - popup.add_line("_Down",data=ACTION.QUEUE_DOWN) - popup.add_line("_Bottom",data=ACTION.QUEUE_BOTTOM) + popup = SelectablePopup(mode, "Queue Action", do_queue, (mode, ids)) + popup.add_line("_Top", data=ACTION.QUEUE_TOP) + popup.add_line("_Up", data=ACTION.QUEUE_UP) + popup.add_line("_Down", data=ACTION.QUEUE_DOWN) + popup.add_line("_Bottom", data=ACTION.QUEUE_BOTTOM) mode.set_popup(popup) return False elif data==ACTION.REMOVE: @@ -168,7 +168,7 @@ def torrent_action(idx, data, mode, ids): wd = data["remove_files"] for tid in ids: log.debug("Removing torrent: %s, %d", tid, wd) - client.core.remove_torrent(tid,wd).addErrback(action_error,mode) + client.core.remove_torrent(tid, wd).addErrback(action_error, mode) rem_msg = "" @@ -209,23 +209,23 @@ def torrent_action(idx, data, mode, ids): def do_move(res): import os.path if os.path.exists(res["path"]) and not os.path.isdir(res["path"]): - mode.report_message("Cannot Move Download Folder","{!error!}%s exists and is not a directory"%res["path"]) + mode.report_message("Cannot Move Download Folder", "{!error!}%s exists and is not a directory"%res["path"]) else: - log.debug("Moving %s to: %s",ids,res["path"]) - client.core.move_storage(ids,res["path"]).addErrback(action_error,mode) + log.debug("Moving %s to: %s", ids, res["path"]) + client.core.move_storage(ids, res["path"]).addErrback(action_error, mode) if len(ids) == 1: mode.clear_marks() return True - popup = InputPopup(mode,"Move Download Folder (Esc to cancel)",close_cb=do_move) - popup.add_text_input("Enter path to move to:","path") + popup = InputPopup(mode, "Move Download Folder (Esc to cancel)", close_cb=do_move) + popup.add_text_input("Enter path to move to:", "path") mode.set_popup(popup) return False elif data==ACTION.RECHECK: log.debug("Rechecking torrents: %s", ids) - client.core.force_recheck(ids).addErrback(action_error,mode) + client.core.force_recheck(ids).addErrback(action_error, mode) elif data==ACTION.REANNOUNCE: - log.debug("Reannouncing torrents: %s",ids) - client.core.force_reannounce(ids).addErrback(action_error,mode) + log.debug("Reannouncing torrents: %s", ids) + client.core.force_reannounce(ids).addErrback(action_error, mode) elif data==ACTION.DETAILS: log.debug("Torrent details") tid = mode.current_torrent_id() @@ -268,7 +268,7 @@ def torrent_action(idx, data, mode, ids): def create_popup(status): cb = lambda result, ids=ids: _do_set_torrent_options(ids, result) - option_popup = InputPopup(mode,"Set torrent options (Esc to cancel)",close_cb=cb, height_req=22) + option_popup = InputPopup(mode, "Set torrent options (Esc to cancel)", close_cb=cb, height_req=22) for (field, field_type) in torrent_options: caption = "{!info!}" + torrent_options_to_names[field] @@ -319,20 +319,20 @@ def torrent_actions_popup(mode,tids,details=False, action = None): if action != None: torrent_action(-1, action, mode, tids) return - popup = SelectablePopup(mode,"Torrent Actions",torrent_action, (mode, tids)) - popup.add_line("_Pause",data=ACTION.PAUSE) - popup.add_line("_Resume",data=ACTION.RESUME) + popup = SelectablePopup(mode, "Torrent Actions", torrent_action, (mode, tids)) + popup.add_line("_Pause", data=ACTION.PAUSE) + popup.add_line("_Resume", data=ACTION.RESUME) if details: popup.add_divider() - popup.add_line("Queue",data=ACTION.QUEUE) + popup.add_line("Queue", data=ACTION.QUEUE) popup.add_divider() - popup.add_line("_Update Tracker",data=ACTION.REANNOUNCE) + popup.add_line("_Update Tracker", data=ACTION.REANNOUNCE) popup.add_divider() - popup.add_line("Remo_ve Torrent",data=ACTION.REMOVE) - popup.add_line("_Force Recheck",data=ACTION.RECHECK) - popup.add_line("_Move Download Folder",data=ACTION.MOVE_STORAGE) + popup.add_line("Remo_ve Torrent", data=ACTION.REMOVE) + popup.add_line("_Force Recheck", data=ACTION.RECHECK) + popup.add_line("_Move Download Folder", data=ACTION.MOVE_STORAGE) popup.add_divider() if details: - popup.add_line("Torrent _Details",data=ACTION.DETAILS) - popup.add_line("Torrent _Options",data=ACTION.TORRENT_OPTIONS) + popup.add_line("Torrent _Details", data=ACTION.DETAILS) + popup.add_line("Torrent _Options", data=ACTION.TORRENT_OPTIONS) mode.set_popup(popup) diff --git a/deluge/ui/console/modes/torrentdetail.py b/deluge/ui/console/modes/torrentdetail.py index 3a3e7332c..e953eee32 100644 --- a/deluge/ui/console/modes/torrentdetail.py +++ b/deluge/ui/console/modes/torrentdetail.py @@ -45,7 +45,7 @@ from collections import deque from deluge.ui.sessionproxy import SessionProxy -from popup import Popup,SelectablePopup,MessagePopup +from popup import Popup, SelectablePopup, MessagePopup from add_util import add_torrent from input_popup import InputPopup import deluge.ui.console.colors as colors @@ -158,12 +158,12 @@ class TorrentDetail(BaseMode, component.Component): # don't keep getting the files once we've got them once if state.get("files"): self.files_sep = "{!green,black,bold,underline!}%s"%(("Files (torrent has %d files)"%len(state["files"])).center(self.cols)) - self.file_list,self.file_dict = self.build_file_list(state["files"],state["file_progress"],state["file_priorities"]) + self.file_list, self.file_dict = self.build_file_list(state["files"], state["file_progress"], state["file_priorities"]) self._status_keys.remove("files") else: self.files_sep = "{!green,black,bold,underline!}%s"%(("Files (File list unknown)").center(self.cols)) need_prio_update = True - self.__fill_progress(self.file_list,state["file_progress"]) + self.__fill_progress(self.file_list, state["file_progress"]) for i, prio in enumerate(state["file_priorities"]): if self.file_dict[i][6] != prio: need_prio_update = True @@ -185,7 +185,7 @@ class TorrentDetail(BaseMode, component.Component): # # Also returns a dictionary that maps index values to the file leaves # for fast updating of progress and priorities - def build_file_list(self, file_tuples,prog,prio): + def build_file_list(self, file_tuples, prog, prio): ret = [] retdict = {} diridx = maxint @@ -197,12 +197,12 @@ class TorrentDetail(BaseMode, component.Component): if not cur or p != cur[-1][0]: cl = [] if p == fin: - ent = [p,f["index"],f["size"],cl,False, + ent = [p, f["index"], f["size"], cl, False, format_utils.format_progress(prog[f["index"]]*100), prio[f["index"]]] retdict[f["index"]] = ent else: - ent = [p,diridx,-1,cl,False,0,-1] + ent = [p, diridx, -1, cl, False, 0, -1] retdict[diridx] = ent diridx-=1 cur.append(ent) @@ -210,8 +210,8 @@ class TorrentDetail(BaseMode, component.Component): else: cur = cur[-1][3] self.__build_sizes(ret) - self.__fill_progress(ret,prog) - return (ret,retdict) + self.__fill_progress(ret, prog) + return (ret, retdict) # fill in the sizes of the directory entries based on their children def __build_sizes(self, fs): @@ -227,12 +227,12 @@ class TorrentDetail(BaseMode, component.Component): # fills in progress fields in all entries based on progs # returns the # of bytes complete in all the children of fs - def __fill_progress(self,fs,progs): + def __fill_progress(self, fs, progs): if not progs: return 0 tb = 0 for f in fs: if f[3]: # dir, has some children - bd = self.__fill_progress(f[3],progs) + bd = self.__fill_progress(f[3], progs) f[5] = format_utils.format_progress((bd/f[2])*100) else: # file, update own prog and add to total bd = f[2]*progs[f[1]] @@ -240,7 +240,7 @@ class TorrentDetail(BaseMode, component.Component): tb += bd return tb - def __fill_prio(self,fs): + def __fill_prio(self, fs): for f in fs: if f[3]: # dir, so fill in children and compute our prio self.__fill_prio(f[3]) @@ -251,30 +251,30 @@ class TorrentDetail(BaseMode, component.Component): f[6] = s.pop() def __update_columns(self): - self.column_widths = [-1,15,15,20] - req = sum(filter(lambda x:x >= 0,self.column_widths)) + self.column_widths = [-1, 15, 15, 20] + req = sum(filter(lambda x:x >= 0, self.column_widths)) if (req > self.cols): # can't satisfy requests, just spread out evenly cw = int(self.cols/len(self.column_names)) - for i in range(0,len(self.column_widths)): + for i in range(0, len(self.column_widths)): self.column_widths[i] = cw else: rem = self.cols - req - var_cols = len(filter(lambda x: x < 0,self.column_widths)) + var_cols = len(filter(lambda x: x < 0, self.column_widths)) vw = int(rem/var_cols) for i in range(0, len(self.column_widths)): if (self.column_widths[i] < 0): self.column_widths[i] = vw - self.column_string = "{!green,black,bold!}%s"%("".join(["%s%s"%(self.column_names[i]," "*(self.column_widths[i]-len(self.column_names[i]))) for i in range(0,len(self.column_names))])) + self.column_string = "{!green,black,bold!}%s"%("".join(["%s%s"%(self.column_names[i], " "*(self.column_widths[i]-len(self.column_names[i]))) for i in range(0, len(self.column_names))])) - def report_message(self,title,message): - self.messages.append((title,message)) + def report_message(self, title, message): + self.messages.append((title, message)) def clear_marks(self): self.marked = {} - def set_popup(self,pu): + def set_popup(self, pu): self.popup = pu self.refresh() @@ -304,7 +304,7 @@ class TorrentDetail(BaseMode, component.Component): #self.__get_file_by_name(old_folder, self.file_list)[0] = new_folder.strip("/") component.get("SessionProxy").get_torrent_status(self.torrentid, self._status_keys).addCallback(self.set_state) - def draw_files(self,files,depth,off,idx): + def draw_files(self, files, depth, off, idx): color_selected = "blue" color_partially_selected = "magenta" @@ -315,7 +315,7 @@ class TorrentDetail(BaseMode, component.Component): # kick out if we're going to draw too low on the screen if (off >= self.rows-1): self.more_to_draw = True - return -1,-1 + return -1, -1 self.file_limit = idx @@ -374,22 +374,22 @@ class TorrentDetail(BaseMode, component.Component): else: # file xchar = '-' - r = format_utils.format_row(["%s%s %s"%(" "*depth,xchar,fl[0]), - deluge.common.fsize(fl[2]),fl[5], + r = format_utils.format_row(["%s%s %s"%(" "*depth, xchar, fl[0]), + deluge.common.fsize(fl[2]), fl[5], format_utils.format_priority(fl[6])], self.column_widths) - self.add_string(off,"%s%s"%(color_string,r),trim=False) + self.add_string(off, "%s%s"%(color_string, r), trim=False) off += 1 if fl[3] and fl[4]: # recurse if we have children and are expanded - off,idx = self.draw_files(fl[3],depth+1,off,idx+1) - if off < 0: return (off,idx) + off, idx = self.draw_files(fl[3], depth+1, off, idx+1) + if off < 0: return (off, idx) else: idx += 1 - return (off,idx) + return (off, idx) def __get_file_list_length(self, file_list=None): """ @@ -518,12 +518,12 @@ class TorrentDetail(BaseMode, component.Component): def refresh(self,lines=None): # show a message popup if there's anything queued if self.popup == None and self.messages: - title,msg = self.messages.popleft() - self.popup = MessagePopup(self,title,msg) + title, msg = self.messages.popleft() + self.popup = MessagePopup(self, title, msg) # Update the status bars self.stdscr.erase() - self.add_string(0,self.statusbars.topbar) + self.add_string(0, self.statusbars.topbar) #This will quite likely fail when switching modes try: @@ -552,11 +552,11 @@ class TorrentDetail(BaseMode, component.Component): self._listing_start = off self._listing_space = self.rows - self._listing_start - self.add_string(off,self.column_string) + self.add_string(off, self.column_string) if self.file_list: off += 1 self.more_to_draw = False - self.draw_files(self.file_list,0,off,0) + self.draw_files(self.file_list, 0, off, 0) if component.get("ConsoleUI").screen != self: return @@ -589,8 +589,8 @@ class TorrentDetail(BaseMode, component.Component): self.refresh() def file_list_up(self, rows=1): - self.current_file_idx = max(0,self.current_file_idx-rows) - self.file_off = min(self.file_off,self.current_file_idx) + self.current_file_idx = max(0, self.current_file_idx-rows) + self.file_off = min(self.file_off, self.current_file_idx) self.refresh() def back_to_overview(self): @@ -608,18 +608,18 @@ class TorrentDetail(BaseMode, component.Component): for f in files: #Do not set priorities for the whole dir, just selected contents if f[3]: - self.build_prio_list(f[3],ret_list,parent_prio,selected_prio) + self.build_prio_list(f[3], ret_list, parent_prio, selected_prio) else: # file, need to add to list if f[1] in self.marked or parent_prio >= 0: # selected (or parent selected), use requested priority - ret_list.append((f[1],selected_prio)) + ret_list.append((f[1], selected_prio)) else: # not selected, just keep old priority - ret_list.append((f[1],f[6])) + ret_list.append((f[1], f[6])) def do_priority(self, idx, data, was_empty): plist = [] - self.build_prio_list(self.file_list,plist,-1,data) + self.build_prio_list(self.file_list, plist, -1, data) plist.sort() priorities = [p[1] for p in plist] log.debug("priorities: %s", priorities) @@ -634,14 +634,14 @@ class TorrentDetail(BaseMode, component.Component): def show_priority_popup(self, was_empty): func = lambda idx, data, we=was_empty: self.do_priority(idx, data, we) if self.marked: - self.popup = SelectablePopup(self,"Set File Priority", func) - self.popup.add_line("_Do Not Download",data=deluge.common.FILE_PRIORITY["Do Not Download"], foreground="red") - self.popup.add_line("_Normal Priority",data=deluge.common.FILE_PRIORITY["Normal Priority"]) - self.popup.add_line("_High Priority",data=deluge.common.FILE_PRIORITY["High Priority"], foreground="yellow") - self.popup.add_line("H_ighest Priority",data=deluge.common.FILE_PRIORITY["Highest Priority"], foreground="green") + self.popup = SelectablePopup(self, "Set File Priority", func) + self.popup.add_line("_Do Not Download", data=deluge.common.FILE_PRIORITY["Do Not Download"], foreground="red") + self.popup.add_line("_Normal Priority", data=deluge.common.FILE_PRIORITY["Normal Priority"]) + self.popup.add_line("_High Priority", data=deluge.common.FILE_PRIORITY["High Priority"], foreground="yellow") + self.popup.add_line("H_ighest Priority", data=deluge.common.FILE_PRIORITY["Highest Priority"], foreground="green") self.popup._selected = 1 - def __mark_unmark(self,idx): + def __mark_unmark(self, idx): """ Selects or unselects file or a catalog(along with contained files) """ @@ -838,7 +838,7 @@ class TorrentDetail(BaseMode, component.Component): new_fname = "%s/%s/" % (old_fname.strip("/").rpartition("/")[0], result["new_foldername"]) self._do_rename_folder(tid, old_fname, new_fname) - popup = InputPopup(self,"Rename folder (Esc to cancel)",close_cb=do_rename) + popup = InputPopup(self, "Rename folder (Esc to cancel)", close_cb=do_rename) popup.add_text("{!info!}Renaming folder:{!input!}") popup.add_text(" * %s\n" % old_filename) popup.add_text_input("Enter new folder name:", "new_foldername", old_filename.strip("/")) @@ -850,7 +850,7 @@ class TorrentDetail(BaseMode, component.Component): fname = "%s/%s" % (self.full_names[idx].rpartition("/")[0], result["new_filename"]) self._do_rename_file(tid, idx, fname) - popup = InputPopup(self,"Rename file (Esc to cancel)",close_cb=do_rename) + popup = InputPopup(self, "Rename file (Esc to cancel)", close_cb=do_rename) popup.add_text("{!info!}Renaming file:{!input!}") popup.add_text(" * %s\n" % old_filename) popup.add_text_input("Enter new filename:", "new_filename", old_filename) @@ -924,10 +924,10 @@ class TorrentDetail(BaseMode, component.Component): elif chr(c) == 'c': self.marked = {} elif chr(c) == 'a': - torrent_actions_popup(self,[self.torrentid],details=False) + torrent_actions_popup(self, [self.torrentid], details=False) return elif chr(c) == 'o': - torrent_actions_popup(self,[self.torrentid],action=ACTION.TORRENT_OPTIONS) + torrent_actions_popup(self, [self.torrentid], action=ACTION.TORRENT_OPTIONS) return elif chr(c) == 'h': self.popup = MessagePopup(self, "Help", HELP_STR, width_req=0.75) diff --git a/deluge/ui/gtkui/createtorrentdialog.py b/deluge/ui/gtkui/createtorrentdialog.py index fa63a3cbb..8a544529e 100644 --- a/deluge/ui/gtkui/createtorrentdialog.py +++ b/deluge/ui/gtkui/createtorrentdialog.py @@ -145,7 +145,7 @@ class CreateTorrentDialog: """Adjusts the recommended piece based on the file/folder/path selected.""" size = self.files_treestore[0][2] model = self.builder.get_object("combo_piece_size").get_model() - for index,value in enumerate(model): + for index, value in enumerate(model): psize = self.parse_piece_size_text(value[0]) pieces = size / psize if pieces < 2048 or (index + 1) == len(model): diff --git a/deluge/ui/tracker_icons.py b/deluge/ui/tracker_icons.py index 9bc310020..24f61aece 100644 --- a/deluge/ui/tracker_icons.py +++ b/deluge/ui/tracker_icons.py @@ -585,16 +585,16 @@ def icon_name_to_host(icon): return icon.rpartition('.')[0] MIME_MAP = { - "image/gif" : "gif", - "image/jpeg" : "jpg", - "image/png" : "png", - "image/vnd.microsoft.icon" : "ico", - "image/x-icon" : "ico", - "gif" : "image/gif", - "jpg" : "image/jpeg", - "jpeg" : "image/jpeg", - "png" : "image/png", - "ico" : "image/vnd.microsoft.icon", + "image/gif": "gif", + "image/jpeg": "jpg", + "image/png": "png", + "image/vnd.microsoft.icon": "ico", + "image/x-icon": "ico", + "gif": "image/gif", + "jpg": "image/jpeg", + "jpeg": "image/jpeg", + "png": "image/png", + "ico": "image/vnd.microsoft.icon", } def mimetype_to_extension(mimetype):