[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