[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