Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/jarabe/controlpanel
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2008-10-08 10:26:16 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2008-10-08 10:26:16 (GMT)
commit77575b4e3b9642a0354807caa6af60922fc14a1d (patch)
tree5e7d32fda49384b1bcea023e8692a7866bb59472 /src/jarabe/controlpanel
parentfb24b313694e06e340be5074d9740e5ef64bb591 (diff)
Make the shell more resilient to bugs in extensions
Diffstat (limited to 'src/jarabe/controlpanel')
-rw-r--r--src/jarabe/controlpanel/cmd.py14
-rw-r--r--src/jarabe/controlpanel/gui.py46
2 files changed, 37 insertions, 23 deletions
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):