Revision: 18251
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18251
Author:   campbellbarton
Date:     2009-01-02 08:54:38 +0100 (Fri, 02 Jan 2009)

Log Message:
-----------
python support for reporting with operators.
* errors in python called operators are raised as errors
* Python defined operators errors are reported as errors (not full traceback 
yet)
* added BKE_reports_string, same as BKE_reports_print but it returns a string 
rather then printing it.
* WM_operator_name_call optionally takes an initialized report struct

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/report.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
    
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    
branches/blender2.5/blender/source/blender/editors/space_action/action_header.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_header.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
    branches/blender2.5/blender/source/blender/python/epy_doc_gen.py
    branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_opwrapper.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h  
2009-01-02 07:29:35 UTC (rev 18250)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h  
2009-01-02 07:54:38 UTC (rev 18251)
@@ -80,6 +80,7 @@
 ReportType BKE_report_store_level(ReportList *reports);
 void BKE_report_store_level_set(ReportList *reports, ReportType level);
 
+char *BKE_reports_string(ReportList *reports, ReportType level);
 void BKE_reports_print(ReportList *reports, ReportType level);
 
 #ifdef __cplusplus

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/report.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/report.c       
2009-01-02 07:29:35 UTC (rev 18250)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/report.c       
2009-01-02 07:54:38 UTC (rev 18251)
@@ -215,17 +215,37 @@
        reports->storelevel= level;
 }
 
-void BKE_reports_print(ReportList *reports, ReportType level)
+char *BKE_reports_string(ReportList *reports, ReportType level)
 {
        Report *report;
+       DynStr *ds;
+       char *cstring;
 
        if(!reports)
-               return;
-       
+               return NULL;
+
+       ds= BLI_dynstr_new();
        for(report=reports->list.first; report; report=report->next)
                if(report->type >= level)
-                       printf("%s: %s\n", report->typestr, report->message);
+                       BLI_dynstr_appendf(ds, "%s: %s\n", report->typestr, 
report->message);
 
+       if (BLI_dynstr_get_len(ds))
+               cstring= BLI_dynstr_get_cstring(ds);
+       else
+               cstring= NULL;
+
+       BLI_dynstr_free(ds);
+       return cstring;
+}
+
+void BKE_reports_print(ReportList *reports, ReportType level)
+{
+       char *cstring = BKE_reports_string(reports, level);
+       
+       if (cstring == NULL)
+               return;
+       
+       printf(cstring);
        fflush(stdout);
 }
 

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-01-02 07:29:35 UTC (rev 18250)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_handlers.c
   2009-01-02 07:54:38 UTC (rev 18251)
@@ -222,7 +222,7 @@
                        after->butm_func(C, after->butm_func_arg, after->a2);
 
                if(after->opname)
-                       WM_operator_name_call(C, after->opname, 
after->opcontext, after->opptr);
+                       WM_operator_name_call(C, after->opname, 
after->opcontext, after->opptr, NULL);
                if(after->opptr) {
                        WM_operator_properties_free(after->opptr);
                        MEM_freeN(after->opptr);

Modified: 
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    2009-01-02 07:29:35 UTC (rev 18250)
+++ 
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
    2009-01-02 07:54:38 UTC (rev 18251)
@@ -1690,7 +1690,7 @@
        const char *opname= arg;
 
        if(opname && retval > 0)
-               WM_operator_name_call(C, opname, WM_OP_EXEC_DEFAULT, NULL);
+               WM_operator_name_call(C, opname, WM_OP_EXEC_DEFAULT, NULL, 
NULL);
 }
 
 static void vconfirm(bContext *C, char *opname, char *title, char *itemfmt, 
va_list ap)

Modified: 
branches/blender2.5/blender/source/blender/editors/space_action/action_header.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_action/action_header.c 
    2009-01-02 07:29:35 UTC (rev 18250)
+++ 
branches/blender2.5/blender/source/blender/editors/space_action/action_header.c 
    2009-01-02 07:54:38 UTC (rev 18251)
@@ -463,10 +463,10 @@
                        break;
                        
                case B_ACTCOPYKEYS:
-                       WM_operator_name_call(C, "ACT_OT_keyframes_copy", 
WM_OP_EXEC_REGION_WIN, NULL);
+                       WM_operator_name_call(C, "ACT_OT_keyframes_copy", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                        break;
                case B_ACTPASTEKEYS:
-                       WM_operator_name_call(C, "ACT_OT_keyframes_paste", 
WM_OP_EXEC_REGION_WIN, NULL);
+                       WM_operator_name_call(C, "ACT_OT_keyframes_paste", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                        break;
        }
 }

Modified: 
branches/blender2.5/blender/source/blender/editors/space_node/node_header.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/node_header.c 
2009-01-02 07:29:35 UTC (rev 18250)
+++ branches/blender2.5/blender/source/blender/editors/space_node/node_header.c 
2009-01-02 07:54:38 UTC (rev 18251)
@@ -592,13 +592,13 @@
        
        switch(event) {
                case 1: /* Zoom in */
-                       WM_operator_name_call(C, "View2D_OT_view_zoomin", 
WM_OP_EXEC_REGION_WIN, NULL);
+                       WM_operator_name_call(C, "View2D_OT_view_zoomin", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                        break;
                case 2: /* View all */
-                       WM_operator_name_call(C, "View2D_OT_view_zoomout", 
WM_OP_EXEC_REGION_WIN, NULL);
+                       WM_operator_name_call(C, "View2D_OT_view_zoomout", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                        break;
                case 3: /* View all */
-                       WM_operator_name_call(C, "NODE_OT_fit_all", 
WM_OP_EXEC_REGION_WIN, NULL);
+                       WM_operator_name_call(C, "NODE_OT_fit_all", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                        break;
                case 4: /* Grease Pencil */
                        // XXX add_blockhandler(sa, NODES_HANDLER_GREASEPENCIL, 
UI_PNL_UNSTOW);

Modified: 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c 
    2009-01-02 07:29:35 UTC (rev 18250)
+++ 
branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c 
    2009-01-02 07:54:38 UTC (rev 18251)
@@ -443,7 +443,7 @@
 // XXX         mainqenter(PADASTERKEY, 1);
                break;
        case 6: /* Center View and Cursor to Origin */
-               WM_operator_name_call(C, "VIEW3D_OT_viewcenter", 
WM_OP_EXEC_REGION_WIN, NULL);
+               WM_operator_name_call(C, "VIEW3D_OT_viewcenter", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                curs= give_cursor(scene, v3d);
                curs[0]=curs[1]=curs[2]= 0.0;
                break;
@@ -528,10 +528,10 @@
                endlocalview(scene, sa);
                break;
        case 9: /* View All (Home) */
-               WM_operator_name_call(C, "VIEW3D_OT_viewhome", 
WM_OP_EXEC_REGION_WIN, NULL);
+               WM_operator_name_call(C, "VIEW3D_OT_viewhome", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                break;
        case 11: /* View Selected */
-               WM_operator_name_call(C, "VIEW3D_OT_viewcenter", 
WM_OP_EXEC_REGION_WIN, NULL);
+               WM_operator_name_call(C, "VIEW3D_OT_viewcenter", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                break;
        case 13: /* Play Back Animation */
                play_anim(0);
@@ -543,7 +543,7 @@
                add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
                break;
        case 17: /* Set Clipping Border */
-               WM_operator_name_call(C, "VIEW3D_OT_clipping", 
WM_OP_INVOKE_REGION_WIN, NULL);
+               WM_operator_name_call(C, "VIEW3D_OT_clipping", 
WM_OP_INVOKE_REGION_WIN, NULL, NULL);
                break;
        case 18: /* render preview */
                toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
@@ -5317,7 +5317,7 @@
 
        switch(event) {
        case B_HOME:
-               WM_operator_name_call(C, "VIEW3D_OT_viewhome", 
WM_OP_EXEC_REGION_WIN, NULL);
+               WM_operator_name_call(C, "VIEW3D_OT_viewhome", 
WM_OP_EXEC_REGION_WIN, NULL, NULL);
                break;
        case B_SCENELOCK:
                if(v3d->scenelock) {

Modified: branches/blender2.5/blender/source/blender/python/epy_doc_gen.py
===================================================================
--- branches/blender2.5/blender/source/blender/python/epy_doc_gen.py    
2009-01-02 07:29:35 UTC (rev 18250)
+++ branches/blender2.5/blender/source/blender/python/epy_doc_gen.py    
2009-01-02 07:54:38 UTC (rev 18251)
@@ -86,8 +86,8 @@
                        
                        array_str = get_array_str(length)
                        
-                       if rna_prop.readonly:   readonly_str = ' (readonly)'
-                       else:                           readonly_str = ''
+                       if rna_prop.editable:   readonly_str = ''
+                       else:                           readonly_str = ' 
(readonly)'
                        
                        if rna_prop_ptr: # Use the pointer type
                                out.write('\...@ivar %s: %s\n' %  
(rna_prop_identifier, rna_desc))

Modified: 
branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c     
2009-01-02 07:29:35 UTC (rev 18250)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c     
2009-01-02 07:54:38 UTC (rev 18251)
@@ -35,7 +35,8 @@
 #include "WM_types.h"
 
 #include "MEM_guardedalloc.h"
-#include "BKE_idprop.h"
+//#include "BKE_idprop.h"
+#include "BKE_report.h"
 
 extern ListBase global_ops; /* evil, temp use */
 
@@ -168,7 +169,7 @@
 }
 
 static PyGetSetDef pyop_func_getseters[] = {
-       {"rna", (getter)pyop_func_get_rna, (setter)NULL, "vertex's coordinate", 
NULL},
+       {"rna", (getter)pyop_func_get_rna, (setter)NULL, "Operator RNA 
properties", NULL},
        {NULL,NULL,NULL,NULL,NULL}  /* Sentinel */
 };
 
@@ -178,7 +179,8 @@
 
        int error_val = 0;
        PointerRNA ptr;
-       
+       char *report_str= NULL;
+
        if (PyTuple_Size(args)) {
                PyErr_SetString( PyExc_AttributeError, "All operator args must 
be keywords");
                return NULL;
@@ -195,7 +197,22 @@
        error_val= PYOP_props_from_dict(&ptr, kw);
        
        if (error_val==0) {
-               WM_operator_name_call(self->C, self->name, WM_OP_EXEC_DEFAULT, 
&ptr);
+               ReportList reports;
+
+               BKE_reports_init(&reports, RPT_STORE);
+
+               WM_operator_name_call(self->C, self->name, WM_OP_EXEC_DEFAULT, 
&ptr, &reports);
+
+               report_str= BKE_reports_string(&reports, RPT_ERROR);
+
+               if (report_str) {
+                       PyErr_SetString(PyExc_SystemError, report_str);
+                       MEM_freeN(report_str);
+                       error_val = -1;
+               }
+
+               if (reports.list.first)
+                       BKE_reports_clear(&reports);
        }
 
        WM_operator_properties_free(&ptr);

Modified: 
branches/blender2.5/blender/source/blender/python/intern/bpy_opwrapper.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_opwrapper.c    
2009-01-02 07:29:35 UTC (rev 18250)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_opwrapper.c    
2009-01-02 07:54:38 UTC (rev 18251)
@@ -27,6 +27,7 @@
 #include "bpy_opwrapper.h"
 #include "BLI_listbase.h"
 #include "BKE_context.h"
+#include "BKE_report.h"
 #include "DNA_windowmanager_types.h"
 #include "MEM_guardedalloc.h"
 #include "WM_api.h"
@@ -168,6 +169,19 @@
        return dict;
 }
 
+/* TODO - a whole traceback would be ideal */

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to