[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57053] trunk/blender/release/scripts/ modules/addon_utils.py: now an addons preference are available when it start,

Campbell Barton ideasman42 at gmail.com
Mon May 27 18:12:06 CEST 2013


Revision: 57053
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57053
Author:   campbellbarton
Date:     2013-05-27 16:12:06 +0000 (Mon, 27 May 2013)
Log Message:
-----------
now an addons preference are available when it start,
this change is made so addons may initialize their own settings.

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/addon_utils.py

Modified: trunk/blender/release/scripts/modules/addon_utils.py
===================================================================
--- trunk/blender/release/scripts/modules/addon_utils.py	2013-05-27 15:13:14 UTC (rev 57052)
+++ trunk/blender/release/scripts/modules/addon_utils.py	2013-05-27 16:12:06 UTC (rev 57053)
@@ -219,7 +219,26 @@
 
     return loaded_default, loaded_state
 
+# utility functions
 
+
+def _addon_ensure(module_name):
+    addons = _user_preferences.addons
+    addon = _user_preferences.addons.get(module_name)
+    if not addon:
+        addon = _user_preferences.addons.new()
+        addon.module = module_name
+
+
+def _addon_remove(module_name):
+    addons = _user_preferences.addons
+
+    while module_name in addons:
+        addon = addons.get(module_name)
+        if addon:
+            addons.remove(addon)
+
+
 def enable(module_name, default_set=True, persistent=False):
     """
     Enables an addon by name.
@@ -257,6 +276,11 @@
                 return None
             mod.__addon_enabled__ = False
 
+    # add the addon first it may want to initialize its own preferences.
+    # must remove on fail through.
+    if default_set:
+        _addon_ensure(module_name)
+
     # Split registering up into 3 steps so we can undo
     # if it fails par way through.
 
@@ -271,6 +295,7 @@
             mod.__addon_enabled__ = False
         except:
             handle_error()
+            _addon_remove(module_name)
             return None
 
         # 2) try register collected modules
@@ -284,16 +309,10 @@
                   getattr(mod, "__file__", module_name))
             handle_error()
             del sys.modules[module_name]
+            _addon_remove(module_name)
             return None
 
     # * OK loaded successfully! *
-    if default_set:
-        # just in case its enabled already
-        ext = _user_preferences.addons.get(module_name)
-        if not ext:
-            ext = _user_preferences.addons.new()
-            ext.module = module_name
-
     mod.__addon_enabled__ = True
     mod.__addon_persistent__ = persistent
 
@@ -332,13 +351,8 @@
               (module_name, "disabled" if mod is None else "loaded"))
 
     # could be in more than once, unlikely but better do this just in case.
-    addons = _user_preferences.addons
-
     if default_set:
-        while module_name in addons:
-            addon = addons.get(module_name)
-            if addon:
-                addons.remove(addon)
+        _addon_remove(module_name)
 
     if _bpy.app.debug_python:
         print("\taddon_utils.disable", module_name)




More information about the Bf-blender-cvs mailing list