[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