[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26924] trunk/blender: classes were having their dictionary cleared when the blender extension data was freed which made re-registering fail .
Campbell Barton
ideasman42 at gmail.com
Mon Feb 15 12:24:43 CET 2010
Revision: 26924
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26924
Author: campbellbarton
Date: 2010-02-15 12:24:43 +0100 (Mon, 15 Feb 2010)
Log Message:
-----------
classes were having their dictionary cleared when the blender extension data was freed which made re-registering fail.
now extensions can be enabled and disabled without having to reload them.
Modified Paths:
--------------
trunk/blender/release/scripts/ui/space_userpref.py
trunk/blender/source/blender/python/intern/bpy_rna.c
Modified: trunk/blender/release/scripts/ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/ui/space_userpref.py 2010-02-15 10:54:51 UTC (rev 26923)
+++ trunk/blender/release/scripts/ui/space_userpref.py 2010-02-15 11:24:43 UTC (rev 26924)
@@ -1406,7 +1406,6 @@
try:
mod = __import__(module_name)
- reload(mod) # FIXME: workaround for the same class not registering twice properly
mod.register()
except:
traceback.print_exc()
@@ -1428,7 +1427,6 @@
try:
mod = __import__(module_name)
mod.unregister()
- reload(mod) # FIXME: workaround for the same class not registering twice properly
except:
traceback.print_exc()
Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c 2010-02-15 10:54:51 UTC (rev 26923)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c 2010-02-15 11:24:43 UTC (rev 26924)
@@ -4085,7 +4085,13 @@
gilstate = PyGILState_Ensure();
- PyDict_Clear(((PyTypeObject*)self)->tp_dict);
+ // breaks re-registering classes
+ // PyDict_Clear(((PyTypeObject*)self)->tp_dict);
+ //
+ // remove the rna attribute instead.
+ PyDict_DelItemString(((PyTypeObject *)self)->tp_dict, "bl_rna");
+ if(PyErr_Occurred())
+ PyErr_Clear();
if(G.f&G_DEBUG) {
if(self->ob_refcnt > 1) {
@@ -4166,7 +4172,7 @@
const char *identifier= "";
if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")) {
- PyErr_SetString(PyExc_AttributeError, "Alredy registered as a subclass.");
+ PyErr_SetString(PyExc_AttributeError, "bpy.types.register(): already registered as a subclass.");
return NULL;
}
@@ -4178,7 +4184,7 @@
reg= RNA_struct_register(srna);
if(!reg) {
- PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no register supported).");
+ PyErr_SetString(PyExc_ValueError, "bpy.types.register(): expected a Type subclassed from a registerable rna type (no register supported).");
return NULL;
}
@@ -4236,6 +4242,11 @@
StructUnregisterFunc unreg;
StructRNA *srna;
+ /*if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")==NULL) {
+ PyErr_SetString(PyExc_ValueError, "bpy.types.unregister(): not a registered as a subclass.");
+ return NULL;
+ }*/
+
srna= pyrna_struct_as_srna(py_class);
if(srna==NULL)
return NULL;
@@ -4244,7 +4255,7 @@
unreg= RNA_struct_unregister(srna);
if(!unreg) {
- PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no unregister supported).");
+ PyErr_SetString(PyExc_ValueError, "bpy.types.unregister(): expected a Type subclassed from a registerable rna type (no unregister supported).");
return NULL;
}
@@ -4254,10 +4265,9 @@
/* call unregister */
unreg(C, srna); /* calls bpy_class_free, this decref's py_class */
- // odd, this doesnt seem to be needed but no idea why since its not removed, campbell
- // printf("%d\n", PyDict_DelItemString(((PyTypeObject *)py_class)->tp_dict, "bl_rna"));
- // PyErr_Clear();
+ PyDict_DelItemString(((PyTypeObject *)py_class)->tp_dict, "bl_rna");
+ if(PyErr_Occurred())
+ PyErr_Clear(); //return NULL;
Py_RETURN_NONE;
}
-
More information about the Bf-blender-cvs
mailing list