From 77575b4e3b9642a0354807caa6af60922fc14a1d Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Wed, 08 Oct 2008 10:26:16 +0000 Subject: Make the shell more resilient to bugs in extensions --- (limited to 'src/jarabe/controlpanel') diff --git a/src/jarabe/controlpanel/cmd.py b/src/jarabe/controlpanel/cmd.py index a1eb044..9a8ed9e 100644 --- a/src/jarabe/controlpanel/cmd.py +++ b/src/jarabe/controlpanel/cmd.py @@ -18,6 +18,7 @@ import sys import getopt import os from gettext import gettext as _ +import traceback from jarabe import config @@ -58,10 +59,15 @@ def load_modules(): for item in folder: if os.path.isdir(os.path.join(path, item)) and \ - os.path.exists(os.path.join(path, item, 'model.py')): - module = __import__('.'.join(('cpsection', item, 'model')), - globals(), locals(), ['model']) - modules.append(module) + os.path.exists(os.path.join(path, item, 'model.py')): + try: + module = __import__('.'.join(('cpsection', item, 'model')), + globals(), locals(), ['model']) + except Exception: + logging.error('Exception while loading extension:\n' + \ + ''.join(traceback.format_exception(*sys.exc_info()))) + else: + modules.append(module) return modules diff --git a/src/jarabe/controlpanel/gui.py b/src/jarabe/controlpanel/gui.py index f4e3081..8b63b78 100644 --- a/src/jarabe/controlpanel/gui.py +++ b/src/jarabe/controlpanel/gui.py @@ -14,11 +14,14 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import gtk import os -import gobject import logging from gettext import gettext as _ +import sys +import traceback + +import gobject +import gtk from sugar.graphics.icon import Icon from sugar.graphics import style @@ -231,23 +234,28 @@ class ControlPanel(gtk.Window): for item in folder: if os.path.isdir(os.path.join(path, item)) and \ os.path.exists(os.path.join(path, item, '__init__.py')): - mod = __import__('.'.join(('cpsection', item)), - globals(), locals(), [item]) - view_class = getattr(mod, 'CLASS', None) - if view_class is not None: - options[item] = {} - options[item]['alerts'] = [] - options[item]['view'] = view_class - options[item]['icon'] = getattr(mod, 'ICON', item) - options[item]['title'] = getattr(mod, 'TITLE', item) - options[item]['color'] = getattr(mod, 'COLOR', None) - keywords = getattr(mod, 'KEYWORDS', []) - keywords.append(options[item]['title'].lower()) - if item not in keywords: - keywords.append(item) - else: - _logger.error('There is no CLASS constant specified in ' \ - 'the view file \'%s\'.' % item) + try: + mod = __import__('.'.join(('cpsection', item)), + globals(), locals(), [item]) + view_class = getattr(mod, 'CLASS', None) + if view_class is not None: + options[item] = {} + options[item]['alerts'] = [] + options[item]['view'] = view_class + options[item]['icon'] = getattr(mod, 'ICON', item) + options[item]['title'] = getattr(mod, 'TITLE', item) + options[item]['color'] = getattr(mod, 'COLOR', None) + keywords = getattr(mod, 'KEYWORDS', []) + keywords.append(options[item]['title'].lower()) + if item not in keywords: + keywords.append(item) + else: + _logger.error('There is no CLASS constant specifieds ' \ + 'in the view file \'%s\'.' % item) + except Exception: + logging.error('Exception while loading extension:\n' + \ + ''.join(traceback.format_exception(*sys.exc_info()))) + return options def __cancel_clicked_cb(self, widget): -- cgit v0.9.1