[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24836] trunk/blender/source/blender/ python/intern: fixed some error reporting issues with calling operators

Campbell Barton ideasman42 at gmail.com
Mon Nov 23 19:08:42 CET 2009


Revision: 24836
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24836
Author:   campbellbarton
Date:     2009-11-23 19:08:42 +0100 (Mon, 23 Nov 2009)

Log Message:
-----------
fixed some error reporting issues with calling operators

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_operator.c
    trunk/blender/source/blender/python/intern/bpy_operator_wrap.c

Modified: trunk/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator.c	2009-11-23 17:55:52 UTC (rev 24835)
+++ trunk/blender/source/blender/python/intern/bpy_operator.c	2009-11-23 18:08:42 UTC (rev 24836)
@@ -76,7 +76,7 @@
 	Py_XINCREF(context_dict); /* so we done loose it */
 
 	if(WM_operator_poll((bContext*)C, ot) == FALSE) {
-		PyErr_SetString( PyExc_SystemError, "_bpy.ops.call: operator poll() function failed, context is incorrect");
+		PyErr_Format( PyExc_SystemError, "_bpy.ops.call: operator %.200s.poll() function failed, context is incorrect", opname);
 		error_val= -1;
 	}
 	else {

Modified: trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-11-23 17:55:52 UTC (rev 24835)
+++ trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-11-23 18:08:42 UTC (rev 24836)
@@ -105,7 +105,11 @@
 	py_class_instance = PyObject_Call(py_class, args, NULL);
 	Py_DECREF(args);
 	
-	if (py_class_instance) { /* Initializing the class worked, now run its invoke function */
+	if (py_class_instance==NULL) { /* Initializing the class worked, now run its invoke function */
+		PyErr_Print();
+		PyErr_Clear();
+	}
+	else {
 		RNA_pointer_create(NULL, &RNA_Context, C, &ptr_context);
 
 		if (mode==PYOP_INVOKE) {
@@ -137,10 +141,6 @@
 		Py_DECREF(args);
 		Py_DECREF(item);
 	}
-	else {
-		PyErr_Print();
-		PyErr_Clear();
-	}
 	
 	if (ret == NULL) { /* covers py_class_instance failing too */
 		if(op)
@@ -149,9 +149,8 @@
 	else {
 		if (mode==PYOP_POLL) {
 			if (PyBool_Check(ret) == 0) {
-				PyErr_SetString(PyExc_ValueError, "Python poll function return value ");
-				if(op)
-					BPy_errors_to_report(op->reports);
+				PyErr_Format(PyExc_ValueError, "Python operator '%s.poll', did not return a bool value", ot->idname);
+				BPy_errors_to_report(op ? op->reports:NULL); /* prints and clears if NULL given */
 			}
 			else {
 				ret_flag= ret==Py_True ? 1:0;
@@ -159,11 +158,8 @@
 			
 		} else if (BPY_flag_from_seq(pyop_ret_flags, ret, &ret_flag) == -1) {
 			/* the returned value could not be converted into a flag */
-			if(op) {
-				fprintf(stderr, "error using return value from \"%s\"\n", op->idname); // for some reason the error raised doesnt include file:line... this helps
-				BPy_errors_to_report(op->reports);
-			}
-
+			PyErr_Format(PyExc_ValueError, "Python operator, error using return value from \"%s\"\n", ot->idname);
+			BPy_errors_to_report(op ? op->reports:NULL);
 			ret_flag = OPERATOR_CANCELLED;
 		}
 		/* there is no need to copy the py keyword dict modified by





More information about the Bf-blender-cvs mailing list