From 9365848df6e6c92d6e2098e88c2a1b479bec9f4b Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Thu, 3 Feb 2005 20:20:37 +0000 Subject: [PATCH] Nicer error reporting if interface is missing. git-svn-id: file:///home/talex/Backups/sf.net/Subversion/zero-install/injector/head@35 9f8c893c-44ee-0310-b757-c8ca8341c71e --- gui.py | 13 ++++++++++--- model.py | 2 ++ run.py | 12 ++++++++++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gui.py b/gui.py index 96942ec..dafcb4b 100644 --- a/gui.py +++ b/gui.py @@ -3,7 +3,7 @@ from iface_browser import InterfaceBrowser import help_box from dialog import Dialog from policy import policy -from model import stable, testing, network_levels +from model import stable, testing, network_levels, SafeException gtk.rc_parse_string('style "scrolled" { ' 'GtkScrolledWindow::scrollbar-spacing = 0}\n' @@ -84,8 +84,15 @@ class MainWindow(Dialog): self.destroy() elif resp == gtk.RESPONSE_OK: import run - run.execute(root_interface, prog, prog_args) - self.destroy() + try: + run.execute(root_interface, prog, prog_args) + self.destroy() + except SafeException, ex: + box = gtk.MessageDialog(self, gtk.DIALOG_MODAL, + gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, + str(ex)) + box.run() + box.destroy() elif resp == gtk.RESPONSE_HELP: gui_help.display() self.connect('response', response) diff --git a/model.py b/model.py index d626ed2..886fdeb 100644 --- a/model.py +++ b/model.py @@ -154,3 +154,5 @@ def escape(uri): lambda match: '%%%02x' % ord(match.group(0)), uri.encode('utf-8')) +class SafeException(Exception): + pass diff --git a/run.py b/run.py index ceffccf..ea9574c 100644 --- a/run.py +++ b/run.py @@ -4,7 +4,7 @@ from policy import policy from model import * def do_env_binding(binding, iface): - impl = policy.implementation[iface] + impl = get_impl(iface) extra = os.path.join(impl.path, binding.insert) if binding.name in os.environ: os.environ[binding.name] = extra + ':' + os.environ[binding.name] @@ -13,7 +13,7 @@ def do_env_binding(binding, iface): def execute(iface, prog, prog_args): def setup_bindings(i): - impl = policy.implementation[i] + impl = get_impl(i) for dep in impl.dependencies.values(): dep_iface = dep.get_interface() for b in dep.bindings: @@ -28,3 +28,11 @@ def execute(iface, prog, prog_args): print "(implementation '%s' + program '%s')" % (policy.implementation[iface].path, prog) sys.exit(1) os.execl(prog_path, prog_path, *prog_args) + +def get_impl(interface): + try: + return policy.implementation[interface] + except KeyError: + raise SafeException("We don't have enough information to " + "run this program yet. " + "Need to download:\n%s" % interface.uri) -- 2.11.4.GIT