py/rna api:
authorCampbell Barton <ideasman42@gmail.com>
Wed, 9 Jun 2010 19:31:10 +0000 (19:31 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 9 Jun 2010 19:31:10 +0000 (19:31 +0000)
- bpy.context wasnt being created from the python bpy.types.Context type defined in bpy_types.py (bpy.context.copy() failed for eg.)
- bpy.context.copy() was returning C defined methods like FloatProperty(), which are not useful in this case, removed.

release/scripts/modules/bpy_types.py
source/blender/python/intern/bpy.c

index 2640288..c8153ce 100644 (file)
@@ -29,11 +29,14 @@ class Context(StructRNA):
     __slots__ = ()
 
     def copy(self):
+        import types
         new_context = {}
         generic_keys = StructRNA.__dict__.keys()
         for item in dir(self):
             if item not in generic_keys:
-                new_context[item] = getattr(self, item)
+                value = getattr(self, item)
+                if type(value) != types.BuiltinMethodType:
+                    new_context[item] = getattr(self, item)
 
         return new_context
 
index 0d532a6..4e1a0ab 100644 (file)
@@ -141,6 +141,7 @@ static void bpy_import_test(char *modname)
 void BPy_init_modules( void )
 {
        extern BPy_StructRNA *bpy_context_module;
+       PointerRNA ctx_ptr;
        PyObject *mod;
 
        /* Needs to be first since this dir is needed for future modules */
@@ -181,9 +182,12 @@ void BPy_init_modules( void )
        PyModule_AddObject( mod, "app", BPY_app_struct() );
 
        /* bpy context */
-       bpy_context_module= ( BPy_StructRNA * ) PyObject_NEW( BPy_StructRNA, &pyrna_struct_Type );
-       RNA_pointer_create(NULL, &RNA_Context, BPy_GetContext(), &bpy_context_module->ptr);
-       bpy_context_module->freeptr= 0;
+       RNA_pointer_create(NULL, &RNA_Context, BPy_GetContext(), &ctx_ptr);
+       bpy_context_module= (BPy_StructRNA *)pyrna_struct_CreatePyObject(&ctx_ptr);
+       /* odd that this is needed, 1 ref on creation and another for the module
+        * but without we get a crash on exit */
+       Py_INCREF(bpy_context_module);
+
        PyModule_AddObject(mod, "context", (PyObject *)bpy_context_module);
 
        /* utility func's that have nowhere else to go */