[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18251] branches/blender2.5/blender/source /blender: python support for reporting with operators.
Campbell Barton
ideasman42 at gmail.com
Fri Jan 2 08:54:40 CET 2009
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('\t at 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. @@
More information about the Bf-blender-cvs
mailing list