[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24152] trunk/blender/source/blender: Modified python rna property types (BPy_PropertyRNA), so PySequence_Check( ) returns true

Campbell Barton ideasman42 at gmail.com
Thu Oct 29 11:03:36 CET 2009


Revision: 24152
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24152
Author:   campbellbarton
Date:     2009-10-29 11:03:34 +0100 (Thu, 29 Oct 2009)

Log Message:
-----------
Modified python rna property types (BPy_PropertyRNA), so PySequence_Check() returns true
this means you can do...
C = {"selected_editable_objects":bpy.data.objects}
...when defining pythons context, without doing list(bpy.data.objects)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_add.c
    trunk/blender/source/blender/editors/object/object_relations.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/python/intern/bpy_interface.c
    trunk/blender/source/blender/python/intern/bpy_rna.c

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2009-10-29 09:25:11 UTC (rev 24151)
+++ trunk/blender/source/blender/editors/object/object_add.c	2009-10-29 10:03:34 UTC (rev 24152)
@@ -737,7 +737,6 @@
 /* after copying objects, copied data should get new pointers */
 static void copy_object_set_idnew(bContext *C, int dupflag)
 {
-	Object *ob;
 	Material *ma, *mao;
 	ID *id;
 #if 0 // XXX old animation system

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c	2009-10-29 09:25:11 UTC (rev 24151)
+++ trunk/blender/source/blender/editors/object/object_relations.c	2009-10-29 10:03:34 UTC (rev 24152)
@@ -976,7 +976,7 @@
 		}
 		CTX_DATA_END;
 	}
-	DAG_scene_sort(CTX_data_scene(C));
+	DAG_scene_sort(scene);
 	ED_anim_dag_flush_update(C);	
 	
 	return OPERATOR_FINISHED;

Modified: trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-10-29 09:25:11 UTC (rev 24151)
+++ trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c	2009-10-29 10:03:34 UTC (rev 24152)
@@ -2489,8 +2489,8 @@
 	return best_seq ? best_seq->startdisp : cfra;
 }
 
-static int next_prev_edit_internal(Scene *scene, int side) {
-	Editing *ed= seq_give_editing(scene, FALSE);
+static int next_prev_edit_internal(Scene *scene, int side)
+{
 	int change=0;
 	int cfra = CFRA;
 	int nfra= find_next_prev_edit(scene, cfra, side);

Modified: trunk/blender/source/blender/python/intern/bpy_interface.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_interface.c	2009-10-29 09:25:11 UTC (rev 24151)
+++ trunk/blender/source/blender/python/intern/bpy_interface.c	2009-10-29 10:03:34 UTC (rev 24152)
@@ -971,28 +971,36 @@
 		CTX_data_pointer_set(result, ptr->id.data, ptr->type, ptr->data);
 		done= 1;
 	}
-	else if (PyList_Check(item)) {
-		int len= PyList_Size(item);
-		int i;
-		for(i = 0; i < len; i++) {
-			PyObject *list_item = PyList_GET_ITEM(item, i); // XXX check type
+	else if (PySequence_Check(item)) {
+		PyObject *seq_fast= PySequence_Fast(item, "bpy_context_get sequence conversion");
+		if (seq_fast==NULL) {
+			PyErr_Print();
+			PyErr_Clear();
+		}
+		else {
+			int len= PySequence_Fast_GET_SIZE(seq_fast);
+			int i;
+			for(i = 0; i < len; i++) {
+				PyObject *list_item= PySequence_Fast_GET_ITEM(seq_fast, i);
 
-			if(BPy_StructRNA_Check(list_item)) {
-				/*
-				CollectionPointerLink *link= MEM_callocN(sizeof(CollectionPointerLink), "bpy_context_get");
-				link->ptr= ((BPy_StructRNA *)item)->ptr;
-				BLI_addtail(&result->list, link);
-				*/
-				ptr= &(((BPy_StructRNA *)list_item)->ptr);
-				CTX_data_list_add(result, ptr->id.data, ptr->type, ptr->data);
+				if(BPy_StructRNA_Check(list_item)) {
+					/*
+					CollectionPointerLink *link= MEM_callocN(sizeof(CollectionPointerLink), "bpy_context_get");
+					link->ptr= ((BPy_StructRNA *)item)->ptr;
+					BLI_addtail(&result->list, link);
+					*/
+					ptr= &(((BPy_StructRNA *)list_item)->ptr);
+					CTX_data_list_add(result, ptr->id.data, ptr->type, ptr->data);
+				}
+				else {
+					printf("List item not a valid type\n");
+				}
+
 			}
-			else {
-				printf("List item not a valid type\n");
-			}
+			Py_DECREF(seq_fast);
 
+			done= 1;
 		}
-
-		done= 1;
 	}
 
 	if(done==0) {

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2009-10-29 09:25:11 UTC (rev 24151)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2009-10-29 10:03:34 UTC (rev 24152)
@@ -1124,11 +1124,24 @@
 	return 0;
 }
 
+static PyObject *pyrna_prop_item(BPy_PropertyRNA * self, Py_ssize_t index)
+{
+	/* reuse subscript functions */
+	if (RNA_property_type(self->prop) == PROP_COLLECTION) {
+		return prop_subscript_collection_int(self, index);
+	} else if (RNA_property_array_check(&self->ptr, self->prop)) {
+		return prop_subscript_array_int(self, index);
+	}
+
+	PyErr_SetString(PyExc_TypeError, "rna type is not an array or a collection");
+	return NULL;
+}
+
 static PySequenceMethods pyrna_prop_as_sequence = {
 	NULL,		/* Cant set the len otherwise it can evaluate as false */
 	NULL,		/* sq_concat */
 	NULL,		/* sq_repeat */
-	NULL,		/* sq_item */
+	(ssizeargfunc)pyrna_prop_item, /* sq_item */ /* Only set this so PySequence_Check() returns True */
 	NULL,		/* sq_slice */
 	NULL,		/* sq_ass_item */
 	NULL,		/* sq_ass_slice */





More information about the Bf-blender-cvs mailing list