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 /release
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.
Diffstat (limited to 'release')
-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'}