[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57561] trunk/blender/release/scripts: report exceptions when enabling and disabling modules in blenders interface .
Campbell Barton
ideasman42 at gmail.com
Wed Jun 19 07:17:32 CEST 2013
Revision: 57561
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57561
Author: campbellbarton
Date: 2013-06-19 05:17:31 +0000 (Wed, 19 Jun 2013)
Log Message:
-----------
report exceptions when enabling and disabling modules in blenders interface.
so if pressing the addon checkbox fails it tells why rather then failing silently.
Modified Paths:
--------------
trunk/blender/release/scripts/modules/addon_utils.py
trunk/blender/release/scripts/startup/bl_operators/wm.py
Modified: trunk/blender/release/scripts/modules/addon_utils.py
===================================================================
--- trunk/blender/release/scripts/modules/addon_utils.py 2013-06-18 22:34:37 UTC (rev 57560)
+++ trunk/blender/release/scripts/modules/addon_utils.py 2013-06-19 05:17:31 UTC (rev 57561)
@@ -239,7 +239,7 @@
addons.remove(addon)
-def enable(module_name, default_set=True, persistent=False):
+def enable(module_name, default_set=True, persistent=False, handle_error=None):
"""
Enables an addon by name.
@@ -253,9 +253,10 @@
import sys
from bpy_restrict_state import RestrictBlend
- def handle_error():
- import traceback
- traceback.print_exc()
+ if handle_error is None:
+ def handle_error():
+ import traceback
+ traceback.print_exc()
# reload if the mtime changes
mod = sys.modules.get(module_name)
@@ -322,7 +323,7 @@
return mod
-def disable(module_name, default_set=True):
+def disable(module_name, default_set=True, handle_error=None):
"""
Disables an addon by name.
@@ -330,6 +331,12 @@
:type module_name: string
"""
import sys
+
+ if handle_error is None:
+ def handle_error():
+ import traceback
+ traceback.print_exc()
+
mod = sys.modules.get(module_name)
# possible this addon is from a previous session and didn't load a
@@ -344,8 +351,7 @@
except:
print("Exception in module unregister(): %r" %
getattr(mod, "__file__", module_name))
- import traceback
- traceback.print_exc()
+ handle_error()
else:
print("addon_utils.disable: %s not %s." %
(module_name, "disabled" if mod is None else "loaded"))
Modified: trunk/blender/release/scripts/startup/bl_operators/wm.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_operators/wm.py 2013-06-18 22:34:37 UTC (rev 57560)
+++ trunk/blender/release/scripts/startup/bl_operators/wm.py 2013-06-19 05:17:31 UTC (rev 57561)
@@ -1574,8 +1574,15 @@
def execute(self, context):
import addon_utils
+
+ err_str = ""
+ def err_cb():
+ import traceback
+ nonlocal err_str
+ err_str = traceback.format_exc()
+ print(err_str)
- mod = addon_utils.enable(self.module)
+ mod = addon_utils.enable(self.module, handle_error=err_cb)
if mod:
info = addon_utils.module_bl_info(mod)
@@ -1590,6 +1597,10 @@
info_ver)
return {'FINISHED'}
else:
+
+ if err_str:
+ self.report({'ERROR'}, err_str)
+
return {'CANCELLED'}
@@ -1606,7 +1617,18 @@
def execute(self, context):
import addon_utils
- addon_utils.disable(self.module)
+ err_str = ""
+ def err_cb():
+ import traceback
+ nonlocal err_str
+ err_str = traceback.format_exc()
+ print(err_str)
+
+ addon_utils.disable(self.module, handle_error=err_cb)
+
+ if err_str:
+ self.report({'ERROR'}, err_str)
+
return {'FINISHED'}
More information about the Bf-blender-cvs
mailing list