[Bf-taskforce25] temporary PKey in the script and 3D view runs "./test.py" ( for testing PyOperators that need to run in the user interface context atm)

Ton Roosendaal ton at blender.org
Fri Dec 26 10:54:34 CET 2008


Hi guys,

With this kind of progress from python side, it's time to freeze specs  
for naming operators. I think the current naming schedule has some  
problems still... can be simplified a bit. What about this suggestion;

Currently names go like:

WM_OT_save_homefile
ED_SCR_OT_frame_offset
ED_VIEW3D_OT_viewhome
ED_OBJECT_OT_make_parent	// note i made cut/paste error in code here

1) Since almost all of the relevant operators will be in "ED" we could  
just skip that prefix, making it a bit shorter in code, we can also  
write out the first module name more clear:

SCREEN_OT_frame_offset
VIEW3D_OT_viewhome
OBJECT_OT_make_parent

2) If we can nicely stick to creating useful modules in the editors  
directory, python can treat those modules as such as well; removing the  
entire prefix, and making it available as api calls like:

wm.save_homefile()
screen.frame_offset()
view3d.viewhome()
object.make_parent()

3) Or even better; why store operators in one giant list in C? We can  
already implement a similar registration structure ourselves, where the  
WM_operatortype_append() automatically puts the defined operators in  
modules, based on prefix.

-Ton-

------------------------------------------------------------------------
Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
Blender Institute BV  Entrepotdok 57A  1018AD Amsterdam The Netherlands

On 25 Dec, 2008, at 15:17, Campbell Barton wrote:

> Revision: 18054
>            
> http://projects.blender.org/plugins/scmsvn/viewcvs.php? 
> view=rev&root=bf-blender&revision=18054
> Author:   campbellbarton
> Date:     2008-12-25 15:17:54 +0100 (Thu, 25 Dec 2008)
>
> Log Message:
> -----------
> * temporary PKey in the script and 3D view runs "./test.py" (for  
> testing PyOperators that need to run in the user interface context  
> atm)
> * added ED_SCRIPT_OT_run_pyfile that takes a filename argument.
> * RNA_property_string_set didn't add a value to ID props if the prop  
> wasnt there (like ints, floats and bools do)
> * bpy_operator.c - raise an error when unknown keyword args are passed  
> to any operator .
>
> Examples of bpy operator api...
>
> bpyoperator.ED_VIEW3D_OT_viewhome(center=1)
> bpyoperator.ED_SCR_OT_frame_offset(delta=10)
> bpyoperator.ED_VIEW3D_OT_make_parent(type='OBJECT')
>
> At the moment there is no way to stop the operators .invoke() function  
> from running so ED_VIEW3D_OT_make_parent still opens the menu even  
> though it doesn't need to.
>
> Modified Paths:
> --------------
>      
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> SConscript
>      
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_intern.h
>      
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> space_script.c
>      
> branches/blender2.5/blender/source/blender/editors/space_view3d/ 
> view3d_ops.c
>      
> branches/blender2.5/blender/source/blender/makesrna/intern/ 
> rna_access.c
>      
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_interface.c
>      
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_operator.c
>
> Added Paths:
> -----------
>      
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_edit.c
>      
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_ops.c
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> SConscript
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> SConscript	2008-12-25 11:09:25 UTC (rev 18053)
> +++  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> SConscript	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -5,5 +5,8 @@
>
>  incs = '../include ../../blenlib ../../blenkernel ../../makesdna  
> ../../imbuf'
>  incs += ' ../../windowmanager #/intern/guardedalloc  
> #/extern/glew/include'
> +incs += ' ../../makesrna'
> +incs += ' ../../python'
>
> +
>  env.BlenderLib ( 'bf_editors_space_script', sources, Split(incs), [],  
> libtype=['core'], priority=[90] )
>
> Added:  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_edit.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_edit.c	                        (rev 0)
> +++  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_edit.c	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -0,0 +1,89 @@
> +/**
> + * $Id:
> + *
> + * ***** BEGIN GPL LICENSE BLOCK *****
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software  
> Foundation,
> + * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
> + *
> + * The Original Code is Copyright (C) 2008 Blender Foundation.
> + * All rights reserved.
> + *
> + *
> + * Contributor(s): Blender Foundation
> + *
> + * ***** END GPL LICENSE BLOCK *****
> + */
> +
> +#include <string.h>
> +#include <stdio.h>
> +
> +#include "DNA_space_types.h"
> +#include "DNA_screen_types.h"
> +#include "DNA_userdef_types.h"
> +
> +#include "MEM_guardedalloc.h"
> +
> +#include "BLI_blenlib.h"
> +
> +#include "BKE_context.h"
> +#include "BKE_global.h"
> +#include "BKE_screen.h"
> +#include "BKE_utildefines.h"
> +
> +#include "WM_api.h"
> +#include "WM_types.h"
> +
> +#include "RNA_access.h"
> +#include "RNA_define.h"
> +
> +#include "ED_screen.h"
> +#include "ED_types.h"
> +
> +#include "UI_interface.h"
> +#include "UI_resources.h"
> +
> +#include "script_intern.h"	// own include
> +
> +
> +#include "BPY_extern.h" /* BPY_run_python_script */
> +
> +static int run_pyfile_exec(bContext *C, wmOperator *op)
> +{
> +	ScrArea *sa= CTX_wm_area(C);
> +	ARegion *ar= CTX_wm_region(C);
> +
> +	char filename[512];
> +	RNA_string_get(op->ptr, "filename", filename);
> +
> +	BPY_run_python_script(C, filename);
> +
> +	ED_region_tag_redraw(ar);
> +
> +	return OPERATOR_FINISHED;
> +}
> +
> +void ED_SCRIPT_OT_run_pyfile(wmOperatorType *ot)
> +{
> +
> +	/* identifiers */
> +	ot->name= "Run python file";
> +	ot->idname= "ED_SCRIPT_OT_run_pyfile";
> +
> +	/* api callbacks */
> +	ot->exec= run_pyfile_exec;
> +	ot->poll= ED_operator_areaactive;
> +
> +	RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH);
> +}
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_intern.h
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_intern.h	2008-12-25 11:09:25 UTC (rev 18053)
> +++  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_intern.h	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -34,6 +34,12 @@
>  /* script_header.c */
>  void script_header_buttons(const bContext *C, ARegion *ar);
>
> +/* script_ops.c */
> +void script_operatortypes(void);
> +void script_keymap(struct wmWindowManager *wm);
>
> +/* script_edit.c */
> +void ED_SCRIPT_OT_run_pyfile(struct wmOperatorType *ot);
> +
>  #endif /* ED_SCRIPT_INTERN_H */
>
>
> Added:  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_ops.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_ops.c	                        (rev 0)
> +++  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> script_ops.c	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -0,0 +1,72 @@
> +/**
> + * $Id:
> + *
> + * ***** BEGIN GPL LICENSE BLOCK *****
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software  
> Foundation,
> + * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
> + *
> + * The Original Code is Copyright (C) 2008 Blender Foundation.
> + * All rights reserved.
> + *
> + *
> + * Contributor(s): Blender Foundation
> + *
> + * ***** END GPL LICENSE BLOCK *****
> + */
> +
> +#include <stdlib.h>
> +#include <math.h>
> +
> +#include "MEM_guardedalloc.h"
> +
> +#include "DNA_scene_types.h"
> +#include "DNA_screen_types.h"
> +#include "DNA_space_types.h"
> +#include "DNA_userdef_types.h"
> +#include "DNA_windowmanager_types.h"
> +
> +#include "BLI_arithb.h"
> +#include "BLI_blenlib.h"
> +
> +#include "BKE_context.h"
> +#include "BKE_global.h"
> +#include "BKE_utildefines.h"
> +
> +#include "RNA_access.h"
> +#include "RNA_define.h"
> +
> +#include "WM_api.h"
> +#include "WM_types.h"
> +
> +#include "ED_screen.h"
> +
> +#include "script_intern.h"
> +
> +
> +/* ************************** registration  
> **********************************/
> +
> +void script_operatortypes(void)
> +{
> +	WM_operatortype_append(ED_SCRIPT_OT_run_pyfile);
> +}
> +
> +void script_keymap(wmWindowManager *wm)
> +{
> +	ListBase *keymap= WM_keymap_listbase(wm, "Script", SPACE_SCRIPT, 0);
> +
> +	/* TODO - this is just while we have no way to load a text datablock  
> */
> +	RNA_string_set(WM_keymap_add_item(keymap, "ED_SCRIPT_OT_run_pyfile",  
> PKEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py");
> +}
> +
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> space_script.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> space_script.c	2008-12-25 11:09:25 UTC (rev 18053)
> +++  
> branches/blender2.5/blender/source/blender/editors/space_script/ 
> space_script.c	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -159,16 +159,6 @@
>  	/* scrollers? */
>  }
>
> -void script_operatortypes(void)
> -{
> -	
> -}
> -
> -void script_keymap(struct wmWindowManager *wm)
> -{
> -	
> -}
> -
>  /* add handlers, stuff you only do once or on area/region changes */
>  static void script_header_area_init(wmWindowManager *wm, ARegion *ar)
>  {
>
> Modified:  
> branches/blender2.5/blender/source/blender/editors/space_view3d/ 
> view3d_ops.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/editors/space_view3d/ 
> view3d_ops.c	2008-12-25 11:09:25 UTC (rev 18053)
> +++  
> branches/blender2.5/blender/source/blender/editors/space_view3d/ 
> view3d_ops.c	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -113,5 +113,8 @@
>  	WM_keymap_add_item(keymap, "ED_VIEW3D_OT_clipping", BKEY, KM_PRESS,  
> KM_ALT, 0);
>  	WM_keymap_add_item(keymap, "ED_VIEW3D_OT_circle_select", CKEY,  
> KM_PRESS, 0, 0);
>
> +	/* TODO - this is just while we have no way to load a text datablock  
> */
> +	RNA_string_set(WM_keymap_add_item(keymap, "ED_SCRIPT_OT_run_pyfile",  
> PKEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py");
> +
>  }
>
>
> Modified:  
> branches/blender2.5/blender/source/blender/makesrna/intern/ 
> rna_access.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/makesrna/intern/ 
> rna_access.c	2008-12-25 11:09:25 UTC (rev 18053)
> +++  
> branches/blender2.5/blender/source/blender/makesrna/intern/ 
> rna_access.c	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -796,6 +796,16 @@
>  		IDP_AssignString(idprop, (char*)value);
>  	else if(sprop->set)
>  		sprop->set(ptr, value);
> +	else if(!(prop->flag & PROP_NOT_EDITABLE)) {
> +		IDPropertyTemplate val;
> +		IDProperty *group;
> +
> +		val.str= value;
> +
> +		group= rna_idproperties_get(ptr->type, ptr->data, 1);
> +		if(group)
> +			IDP_AddToGroup(group, IDP_New(IDP_STRING, val,  
> (char*)prop->identifier));
> +	}
>  }
>
>  int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
>
> Modified:  
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_interface.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_interface.c	2008-12-25 11:09:25 UTC (rev 18053)
> +++  
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_interface.c	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -72,9 +72,9 @@
>  	PyObject *py_dict, *py_result;
>  	char pystring[512];
>  	PyGILState_STATE gilstate;
> -	
> +
>  	/* TODO - look into a better way to run a file */
> -	sprintf(pystring, "exec(open(r'%s').read())", fn);
> +	sprintf(pystring, "exec(open(r'%s').read())", fn);	
>  	
>  	BPY_start_python();
>  	
>
> Modified:  
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_operator.c
> ===================================================================
> ---  
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_operator.c	2008-12-25 11:09:25 UTC (rev 18053)
> +++  
> branches/blender2.5/blender/source/blender/python/intern/ 
> bpy_operator.c	2008-12-25 14:17:54 UTC (rev 18054)
> @@ -93,6 +93,7 @@
>  	wmOperatorType *ot;
>
>  	int error_val = 0;
> +	int totkw;
>  	const char *arg_name= NULL;
>  	PyObject *item;
>  	
> @@ -118,6 +119,7 @@
>  	iterprop= RNA_struct_iterator_property(&ptr);
>  	RNA_property_collection_begin(&ptr, iterprop, &iter);
>
> +	totkw = kw ? PyDict_Size(kw):0;
>
>  	for(; iter.valid; RNA_property_collection_next(&iter)) {
>  		prop= iter.ptr.data;
> @@ -144,26 +146,39 @@
>  			error_val= 1;
>  			break;
>  		}
> +
> +		totkw--;
>  	}
>
>  	RNA_property_collection_end(&iter);
>
> -	if (error_val) {
> -		if (properties) {
> -			IDP_FreeProperty(properties);
> -			MEM_freeN(properties);
> +	if (error_val==0 && totkw > 0) { /* some keywords were given that  
> were not used :/ */
> +		PyObject *key, *value;
> +		Py_ssize_t pos = 0;
> +
>
> @@ Diff output truncated at 10240 characters. @@
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>



More information about the Bf-taskforce25 mailing list