[Bf-blender-cvs] [c3634afe47] app-templates: Add support for a template addons directory

Campbell Barton noreply at git.blender.org
Mon Mar 20 04:19:25 CET 2017


Commit: c3634afe4777a02febc1a6f2c1b4fcf4e71e4ea7
Author: Campbell Barton
Date:   Mon Mar 20 14:24:57 2017 +1100
Branches: app-templates
https://developer.blender.org/rBc3634afe4777a02febc1a6f2c1b4fcf4e71e4ea7

Add support for a template addons directory

===================================================================

M	release/datafiles/app_templates/101/template/__init__.py

===================================================================

diff --git a/release/datafiles/app_templates/101/template/__init__.py b/release/datafiles/app_templates/101/template/__init__.py
index 901d21cfc8..1a697d840f 100644
--- a/release/datafiles/app_templates/101/template/__init__.py
+++ b/release/datafiles/app_templates/101/template/__init__.py
@@ -26,14 +26,21 @@ class AppStateStore:
     # Utility class to encapsulate application state, backup and restore.
     __slots__ = (
         "class_store",
+        "sys_path",
+    )
+
+    _template_addons = (
     )
 
     def __init__(self):
         self.class_store = []
+        self.sys_path = []
 
-    def backup(self):
+    def setup_classes(self):
         assert(len(self.class_store) == 0)
 
+        # Classes
+
         self.class_store.extend(
             bl_app_override.class_filter(
                 bpy.types.Panel,
@@ -53,7 +60,7 @@ class AppStateStore:
         for cls in self.class_store:
             unregister(cls)
 
-    def restore(self):
+    def teardown_classes(self):
         assert(len(self.class_store) != 0)
 
         register = bpy.utils.register_class
@@ -61,6 +68,32 @@ class AppStateStore:
             register(cls)
         self.class_store.clear()
 
+    def setup_addons(self):
+        import sys
+        import os
+        template_addons = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "addons"))
+        if template_addons not in sys.path:
+            sys.path.append(template_addons)
+            self.sys_path.append(template_addons)
+
+        import addon_utils
+        for addon in self._template_addons:
+            addon_utils.enable(addon)
+
+    def teardown_addons(self):
+        import sys
+        for path in self.sys_path:
+            # should always succeed, but if not its no problem
+            try:
+                sys.path.remove(path)
+            except:
+                pass
+        self.sys_path.clear()
+
+        import addon_utils
+        for addon in self._template_addons:
+            addon_utils.disable(addon)
+
 
 app_state = AppStateStore()
 
@@ -68,7 +101,8 @@ from . import ui
 
 def register():
     print("Template Register", __file__)
-    app_state.backup()
+    app_state.setup_classes()
+    app_state.setup_addons()
 
     ui.register()
 
@@ -77,4 +111,5 @@ def unregister():
 
     ui.unregister()
 
-    app_state.restore()
+    app_state.teardown_classes()
+    app_state.teardown_addons()




More information about the Bf-blender-cvs mailing list