report exceptions when enabling and disabling modules in blenders interface.
so if pressing the addon checkbox fails it tells why rather then failing silently.
This commit is contained in:
parent
dd54b99b33
commit
841c200767
@ -239,7 +239,7 @@ def _addon_remove(module_name):
|
|||||||
addons.remove(addon)
|
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.
|
Enables an addon by name.
|
||||||
|
|
||||||
@ -253,9 +253,10 @@ def enable(module_name, default_set=True, persistent=False):
|
|||||||
import sys
|
import sys
|
||||||
from bpy_restrict_state import RestrictBlend
|
from bpy_restrict_state import RestrictBlend
|
||||||
|
|
||||||
def handle_error():
|
if handle_error is None:
|
||||||
import traceback
|
def handle_error():
|
||||||
traceback.print_exc()
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
# reload if the mtime changes
|
# reload if the mtime changes
|
||||||
mod = sys.modules.get(module_name)
|
mod = sys.modules.get(module_name)
|
||||||
@ -322,7 +323,7 @@ def enable(module_name, default_set=True, persistent=False):
|
|||||||
return mod
|
return mod
|
||||||
|
|
||||||
|
|
||||||
def disable(module_name, default_set=True):
|
def disable(module_name, default_set=True, handle_error=None):
|
||||||
"""
|
"""
|
||||||
Disables an addon by name.
|
Disables an addon by name.
|
||||||
|
|
||||||
@ -330,6 +331,12 @@ def disable(module_name, default_set=True):
|
|||||||
:type module_name: string
|
:type module_name: string
|
||||||
"""
|
"""
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
if handle_error is None:
|
||||||
|
def handle_error():
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
mod = sys.modules.get(module_name)
|
mod = sys.modules.get(module_name)
|
||||||
|
|
||||||
# possible this addon is from a previous session and didn't load a
|
# 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:
|
except:
|
||||||
print("Exception in module unregister(): %r" %
|
print("Exception in module unregister(): %r" %
|
||||||
getattr(mod, "__file__", module_name))
|
getattr(mod, "__file__", module_name))
|
||||||
import traceback
|
handle_error()
|
||||||
traceback.print_exc()
|
|
||||||
else:
|
else:
|
||||||
print("addon_utils.disable: %s not %s." %
|
print("addon_utils.disable: %s not %s." %
|
||||||
(module_name, "disabled" if mod is None else "loaded"))
|
(module_name, "disabled" if mod is None else "loaded"))
|
||||||
|
@ -1574,8 +1574,15 @@ class WM_OT_addon_enable(Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
import addon_utils
|
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:
|
if mod:
|
||||||
info = addon_utils.module_bl_info(mod)
|
info = addon_utils.module_bl_info(mod)
|
||||||
@ -1590,6 +1597,10 @@ class WM_OT_addon_enable(Operator):
|
|||||||
info_ver)
|
info_ver)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
else:
|
else:
|
||||||
|
|
||||||
|
if err_str:
|
||||||
|
self.report({'ERROR'}, err_str)
|
||||||
|
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
|
|
||||||
|
|
||||||
@ -1606,7 +1617,18 @@ class WM_OT_addon_disable(Operator):
|
|||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
import addon_utils
|
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'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user