Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-06-19 09:17:31 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-06-19 09:17:31 +0400
commit841c200767bbc84afa6d1ce186dabe234fc0aaf5 (patch)
tree30724955c653ac43e9df152c1142aa82c8c10afc
parentdd54b99b33379b492c10b1da5a69213ad5b1dae7 (diff)
report exceptions when enabling and disabling modules in blenders interface.
so if pressing the addon checkbox fails it tells why rather then failing silently.
-rw-r--r--release/scripts/modules/addon_utils.py20
-rw-r--r--release/scripts/startup/bl_operators/wm.py26
2 files changed, 37 insertions, 9 deletions
diff --git a/release/scripts/modules/addon_utils.py b/release/scripts/modules/addon_utils.py
index 7e7612e56d8..a197c20fdab 100644
--- a/release/scripts/modules/addon_utils.py
+++ b/release/scripts/modules/addon_utils.py
@@ -239,7 +239,7 @@ def _addon_remove(module_name):
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 @@ def enable(module_name, default_set=True, persistent=False):
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 @@ def enable(module_name, default_set=True, persistent=False):
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 @@ def disable(module_name, default_set=True):
: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 @@ def disable(module_name, default_set=True):
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"))
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index fd1f538efd3..fba7672e846 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1574,8 +1574,15 @@ class WM_OT_addon_enable(Operator):
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 @@ class WM_OT_addon_enable(Operator):
info_ver)
return {'FINISHED'}
else:
+
+ if err_str:
+ self.report({'ERROR'}, err_str)
+
return {'CANCELLED'}
@@ -1606,7 +1617,18 @@ class WM_OT_addon_disable(Operator):
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'}