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


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to