From 6343f32d70408ba6abe139d14fe35cb279549465 Mon Sep 17 00:00:00 2001 From: Jamie Lennox Date: Sat, 19 Nov 2011 19:35:09 +1100 Subject: [PATCH] [#1973] [UI] Standardize child cmd option parsing. Handle child args and -a args in a common way so that all children accept the same input format. Modify UIs to pass through setup arguments to the base class. Instead of launching the UI directly launch the UI via the _UI subclasses in the same way that the scripts launch the clients. --- deluge/main.py | 23 +++++++++++++++++------ deluge/ui/console/main.py | 9 +++++---- deluge/ui/gtkui/gtkui.py | 8 ++++---- deluge/ui/ui.py | 18 +++++++++--------- deluge/ui/web/web.py | 8 ++++---- 5 files changed, 39 insertions(+), 27 deletions(-) diff --git a/deluge/main.py b/deluge/main.py index 278dbf9ea..146dcdb14 100644 --- a/deluge/main.py +++ b/deluge/main.py @@ -29,6 +29,7 @@ DEFAULT_PREFS = { "default_ui": "gtk" } + def start_ui(): """Entry point for ui script""" deluge.common.setup_translations() @@ -70,19 +71,29 @@ def start_ui(): config.save() del config + # reconstruct arguments to hand off to child client + client_args = [] + if options.args: + import shlex + client_args.extend(shlex.split(options.args)) + client_args.extend(args) + try: if selected_ui == "gtk": log.info("Starting GtkUI..") - from deluge.ui.gtkui.gtkui import GtkUI - ui = GtkUI(args) + from deluge.ui.gtkui.gtkui import Gtk + ui = Gtk(skip_common=True) + ui.start(client_args) elif selected_ui == "web": log.info("Starting WebUI..") - from deluge.ui.web.web import WebUI - ui = WebUI(args) + from deluge.ui.web.web import Web + ui = Web(skip_common=True) + ui.start(client_args) elif selected_ui == "console": log.info("Starting ConsoleUI..") - from deluge.ui.console.main import ConsoleUI - ui = ConsoleUI(options.args) + from deluge.ui.console.main import Console + ui = Console(skip_common=True) + ui.start(client_args) except ImportError, e: import sys import traceback diff --git a/deluge/ui/console/main.py b/deluge/ui/console/main.py index 2b141589b..2aa981ebe 100644 --- a/deluge/ui/console/main.py +++ b/deluge/ui/console/main.py @@ -37,14 +37,15 @@ class Console(_UI): help = """Starts the Deluge console interface""" - def __init__(self): - super(Console, self).__init__("console") + def __init__(self, *args, **kwargs): + super(Console, self).__init__("console", *args, **kwargs) group = optparse.OptionGroup(self.parser, "Console Options", "These daemon connect options will be " "used for commands, or if console ui autoconnect is enabled.") group.add_option("-d", "--daemon", dest="daemon_addr") group.add_option("-p", "--port", dest="daemon_port", type="int") group.add_option("-u", "--username", dest="daemon_user") group.add_option("-P", "--password", dest="daemon_pass") + self.parser.add_option_group(group) self.parser.disable_interspersed_args() @@ -81,8 +82,8 @@ class Console(_UI): % os.path.basename(sys.argv[0]), cmds=self.console_cmds) self.parser.add_option_group(cmd_group) - def start(self): - super(Console, self).start() + def start(self, args=None): + super(Console, self).start(args) ConsoleUI(self.args, self.console_cmds, (self.options.daemon_addr, self.options.daemon_port, self.options.daemon_user, self.options.daemon_pass)) diff --git a/deluge/ui/gtkui/gtkui.py b/deluge/ui/gtkui/gtkui.py index 8deb36ed2..53698b31c 100644 --- a/deluge/ui/gtkui/gtkui.py +++ b/deluge/ui/gtkui/gtkui.py @@ -73,11 +73,11 @@ class Gtk(_UI): help = """Starts the Deluge GTK+ interface""" - def __init__(self): - super(Gtk, self).__init__("gtk") + def __init__(self, *args, **kwargs): + super(Gtk, self).__init__("gtk", *args, **kwargs) - def start(self): - super(Gtk, self).start() + def start(self, args=None): + super(Gtk, self).start(args) GtkUI(self.args) diff --git a/deluge/ui/ui.py b/deluge/ui/ui.py index 94df93b69..828d763f4 100644 --- a/deluge/ui/ui.py +++ b/deluge/ui/ui.py @@ -7,10 +7,8 @@ # See LICENSE for more details. # -from __future__ import print_function - import logging -import sys +import optparse import deluge.common import deluge.configmanager @@ -34,7 +32,7 @@ if 'dev' not in deluge.common.get_version(): class _UI(object): - def __init__(self, name="gtk"): + def __init__(self, name="gtk", skip_common=False): self.__name = name if name == "gtk": @@ -42,7 +40,7 @@ class _UI(object): else: deluge.common.setup_translations() - self.__parser = CommonOptionParser() + self.__parser = optparse.OptionParser() if skip_common else CommonOptionParser() @property def name(self): @@ -60,10 +58,12 @@ class _UI(object): def args(self): return self.__args - def start(self): - # Make sure all arguments are unicode - argv = deluge.common.unicode_argv()[1:] - (self.__options, self.__args) = self.__parser.parse_args(argv) + def start(self, args=None): + if args is None: + # Make sure all arguments are unicode + args = deluge.common.unicode_argv()[1:] + + self.__options, self.__args = self.__parser.parse_args(args) log = logging.getLogger(__name__) diff --git a/deluge/ui/web/web.py b/deluge/ui/web/web.py index 449948381..633c104bc 100644 --- a/deluge/ui/web/web.py +++ b/deluge/ui/web/web.py @@ -28,8 +28,8 @@ class Web(_UI): help = """Starts the Deluge web interface""" - def __init__(self): - super(Web, self).__init__("web") + def __init__(self, *args, **kwargs): + super(Web, self).__init__("web", *args, **kwargs) self.__server = None group = OptionGroup(self.parser, "Web Options") @@ -67,8 +67,8 @@ class Web(_UI): def server(self): return self.__server - def start(self): - super(Web, self).start() + def start(self, args=None): + super(Web, self).start(args) # Steps taken from http://www.faqs.org/faqs/unix-faq/programmer/faq/ # Section 1.7