[Bf-blender-cvs] [4b88cc97e8] app-templates: Disable addons before setting template
Campbell Barton
noreply at git.blender.org
Thu Mar 16 20:02:37 CET 2017
Commit: 4b88cc97e82dc442cb9df8c2f8be5399b7a0e436
Author: Campbell Barton
Date: Fri Mar 17 06:06:55 2017 +1100
Branches: app-templates
https://developer.blender.org/rB4b88cc97e82dc442cb9df8c2f8be5399b7a0e436
Disable addons before setting template
This is needed so we can manage classes without getting mixed up with add-on classes.
===================================================================
M release/scripts/modules/addon_utils.py
M release/scripts/modules/bl_app_template_utils.py
===================================================================
diff --git a/release/scripts/modules/addon_utils.py b/release/scripts/modules/addon_utils.py
index 886f078f04..a2deba344e 100644
--- a/release/scripts/modules/addon_utils.py
+++ b/release/scripts/modules/addon_utils.py
@@ -444,6 +444,13 @@ def reset_all(*, reload_scripts=False):
disable(mod_name)
+def disable_all():
+ import sys
+ for mod_name, mod in sys.modules.items():
+ if getattr(mod, "__addon_enabled__", False):
+ disable(mod_name)
+
+
def module_bl_info(mod, info_basis=None):
if info_basis is None:
info_basis = {
diff --git a/release/scripts/modules/bl_app_template_utils.py b/release/scripts/modules/bl_app_template_utils.py
index 73f24c9061..0c74e0b920 100644
--- a/release/scripts/modules/bl_app_template_utils.py
+++ b/release/scripts/modules/bl_app_template_utils.py
@@ -57,6 +57,35 @@ _app_template = {
_modules = {}
+# -----------------------------------------------------------------------------
+# Helper Classes
+
+# Avoids leaving sys.paths & modules in an unknown state.
+class _IsolateImportHelper:
+
+ __slots__ = ("path", "module", "module_name")
+
+ def __init__(self, path, module_name):
+ self.path = path
+ self.module_name = module_name
+
+ def __enter__(self):
+ import sys
+ self.module = sys.modules.pop(self.module_name, None)
+ sys.path.insert(0, self.path)
+
+ def __exit__(self, type, value, traceback):
+ import sys
+ if self.module is not None:
+ sys.modules[self.module_name] = self.module
+ else:
+ sys.modules.pop(self.module_name, None)
+ try:
+ sys.path.remove(self.path)
+ except Exception:
+ pass
+
+
def _enable(template_id, *, handle_error=None):
import os
import sys
@@ -142,33 +171,6 @@ def _disable(template_id, *, handle_error=None):
if _bpy.app.debug_python:
print("\tapp_template_utils.disable", template_id)
-
-# Avoids leaving sys.paths & modules in an unknown state.
-class _IsolateImportHelper:
-
- __slots__ = ("path", "module", "module_name")
-
- def __init__(self, path, module_name):
- self.path = path
- self.module_name = module_name
-
- def __enter__(self):
- import sys
- self.module = sys.modules.pop(self.module_name, None)
- sys.path.insert(0, self.path)
-
- def __exit__(self, type, value, traceback):
- import sys
- if self.module is not None:
- sys.modules[self.module_name] = self.module
- else:
- sys.modules.pop(self.module_name, None)
- try:
- sys.path.remove(self.path)
- except Exception:
- pass
-
-
def import_from_path(path):
"""
Imports 'startup' from a path.
@@ -191,6 +193,10 @@ def import_from_id(template_id):
def activate(template_id=None):
+ # Disable all addons, afterwards caller must reset.
+ import addon_utils
+ addon_utils.disable_all()
+
template_id_prev = _app_template["id"]
if template_id_prev:
_disable(template_id_prev)
More information about the Bf-blender-cvs
mailing list