[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27169] trunk/blender/source/blender/ python/intern: utility function pyrna_enum_value_from_id for getting the enum from a string and raising an error if its invalid .

Campbell Barton ideasman42 at gmail.com
Sat Feb 27 16:28:34 CET 2010


Revision: 27169
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27169
Author:   campbellbarton
Date:     2010-02-27 16:28:34 +0100 (Sat, 27 Feb 2010)

Log Message:
-----------
utility function pyrna_enum_value_from_id for getting the enum from a string and raising an error if its invalid.

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_rna.c
    trunk/blender/source/blender/python/intern/bpy_rna.h
    trunk/blender/source/blender/python/intern/bpy_rna_callback.c

Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.c	2010-02-27 14:54:45 UTC (rev 27168)
+++ trunk/blender/source/blender/python/intern/bpy_rna.c	2010-02-27 15:28:34 UTC (rev 27169)
@@ -155,6 +155,19 @@
 	(BaseMathSetIndexFunc)	NULL
 };
 
+/* same as RNA_enum_value_from_id but raises an exception  */
+int pyrna_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value, const char *error_prefix)
+{
+	if(RNA_enum_value_from_id(item, identifier, value) == 0) {
+		char *enum_str= BPy_enum_as_string(item);
+		PyErr_Format(PyExc_TypeError, "%s: '%.200s' not found in (%s)", error_prefix, identifier, enum_str);
+		MEM_freeN(enum_str);
+		return -1;
+	}
+
+	return 0;
+}
+
 #define PROP_ALL_VECTOR_SUBTYPES PROP_TRANSLATION: case PROP_DIRECTION: case PROP_VELOCITY: case PROP_ACCELERATION: case PROP_XYZ: case PROP_XYZ|PROP_UNIT_LENGTH
 
 PyObject *pyrna_math_object_from_array(PointerRNA *ptr, PropertyRNA *prop)
@@ -478,13 +491,8 @@
 			PyErr_Format(PyExc_TypeError, "%.200s expected a string. found a %.200s", error_prefix, Py_TYPE(key)->tp_name);
 			return -1;
 		}
-
-		if(RNA_enum_value_from_id(items, param, &ret) == 0) {
-			char *enum_str= BPy_enum_as_string(items);
-			PyErr_Format(PyExc_TypeError, "%.200s \"%.200s\" not found in (%.200s)", error_prefix, param, enum_str);
-			MEM_freeN(enum_str);
+		if(pyrna_enum_value_from_id(items, param, &ret, error_prefix) < 0)
 			return -1;
-		}
 
 		flag |= ret;
 	}

Modified: trunk/blender/source/blender/python/intern/bpy_rna.h
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna.h	2010-02-27 14:54:45 UTC (rev 27168)
+++ trunk/blender/source/blender/python/intern/bpy_rna.h	2010-02-27 15:28:34 UTC (rev 27169)
@@ -84,6 +84,8 @@
 PyObject *pyrna_enum_bitfield_to_py(struct EnumPropertyItem *items, int value);
 int pyrna_set_to_enum_bitfield(EnumPropertyItem *items, PyObject *value, int *r_value, const char *error_prefix);
 
+int pyrna_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value, const char *error_prefix);
+
 /* function for registering types */
 PyObject *pyrna_basetype_register(PyObject *self, PyObject *args);
 PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *args);

Modified: trunk/blender/source/blender/python/intern/bpy_rna_callback.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna_callback.c	2010-02-27 14:54:45 UTC (rev 27168)
+++ trunk/blender/source/blender/python/intern/bpy_rna_callback.c	2010-02-27 15:28:34 UTC (rev 27169)
@@ -66,19 +66,18 @@
 	void *handle;
 
 	PyObject *cb_func, *cb_args;
-	char *cb_type= NULL;
-	int cb_type_enum;
+	char *cb_event_str= NULL;
+	int cb_event;
 
-	if (!PyArg_ParseTuple(args, "OO|s:callback_add", &cb_func, &cb_args, &cb_type))
+	if (!PyArg_ParseTuple(args, "OO|s:bpy_struct.callback_add", &cb_func, &cb_args, &cb_event_str))
 		return NULL;
 
 	if(RNA_struct_is_a(self->ptr.type, &RNA_Region)) {
-		if(RNA_enum_value_from_id(region_draw_mode_items, cb_type, &cb_type_enum)==0) {
-			PyErr_SetString(PyExc_ValueError, "callbcak_add(): enum invalid type");
+
+		if(pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") < 0)
 			return NULL;
-		}
 
-		handle= ED_region_draw_cb_activate(((ARegion *)self->ptr.data)->type, cb_region_draw, (void *)args, cb_type_enum);
+		handle= ED_region_draw_cb_activate(((ARegion *)self->ptr.data)->type, cb_region_draw, (void *)args, cb_event);
 		Py_INCREF(args);
 	}
 	else {





More information about the Bf-blender-cvs mailing list