[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21662] branches/blender2.5/blender: python access to operators now hides the _OT_ syntax, eg.

Campbell Barton ideasman42 at gmail.com
Fri Jul 17 14:26:40 CEST 2009


Revision: 21662
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21662
Author:   campbellbarton
Date:     2009-07-17 14:26:40 +0200 (Fri, 17 Jul 2009)

Log Message:
-----------
python access to operators now hides the _OT_ syntax, eg. SOME_OT_operator -> some.operator
this works for the calling operators from python and using the RNA api.

bpy.ops.CONSOLE_exec() is now bpy.ops.console.exec()

eg.
split.itemO("PARTICLE_OT_editable_set", text="Free Edit") becomes... split.itemO("particle.editable_set", text="Free Edit")

For now any operator thats called checks if its missing _OT_ and assumes its python syntax and converts it before doing the lookup.

bpy.ops is a python class in release/ui/bpy_ops.py which does the fake submodules and conversion, the C operator api is at bpy.__ops__

personally Id still rather rename C id-names not to contain the _OT_ text which would avoid the conversion, its called a lot since the UI has to convert the operators.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_data_lattice.py
    branches/blender2.5/blender/release/ui/buttons_data_mesh.py
    branches/blender2.5/blender/release/ui/buttons_data_modifier.py
    branches/blender2.5/blender/release/ui/buttons_material.py
    branches/blender2.5/blender/release/ui/buttons_object_constraint.py
    branches/blender2.5/blender/release/ui/buttons_objects.py
    branches/blender2.5/blender/release/ui/buttons_particle.py
    branches/blender2.5/blender/release/ui/buttons_physics_cloth.py
    branches/blender2.5/blender/release/ui/buttons_physics_fluid.py
    branches/blender2.5/blender/release/ui/buttons_physics_softbody.py
    branches/blender2.5/blender/release/ui/buttons_scene.py
    branches/blender2.5/blender/release/ui/buttons_texture.py
    branches/blender2.5/blender/release/ui/buttons_world.py
    branches/blender2.5/blender/release/ui/space_console.py
    branches/blender2.5/blender/release/ui/space_filebrowser.py
    branches/blender2.5/blender/release/ui/space_image.py
    branches/blender2.5/blender/release/ui/space_info.py
    branches/blender2.5/blender/release/ui/space_outliner.py
    branches/blender2.5/blender/release/ui/space_sequencer.py
    branches/blender2.5/blender/release/ui/space_text.py
    branches/blender2.5/blender/release/ui/space_view3d.py
    branches/blender2.5/blender/release/ui/space_view3d_toolbar.py
    branches/blender2.5/blender/source/blender/python/intern/bpy_interface.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Added Paths:
-----------
    branches/blender2.5/blender/release/ui/bpy_ops.py

Added: branches/blender2.5/blender/release/ui/bpy_ops.py
===================================================================
--- branches/blender2.5/blender/release/ui/bpy_ops.py	                        (rev 0)
+++ branches/blender2.5/blender/release/ui/bpy_ops.py	2009-07-17 12:26:40 UTC (rev 21662)
@@ -0,0 +1,107 @@
+import bpy
+
+# This class is used for bpy.ops
+#
+
+class bpy_ops(object):
+	'''
+	Fake module like class.
+	
+	 bpy.ops
+	'''
+	def add(self, pyop):
+		bpy.__ops__.add(pyop)
+	
+	def remove(self, pyop):
+		bpy.__ops__.remove(pyop)
+	
+	def __getattr__(self, module):
+		'''
+		gets a bpy.ops submodule
+		'''
+		return bpy_ops_submodule(module)
+		
+	def __dir__(self):
+		
+		submodules = set()
+		
+		for id_name in dir(bpy.__ops__):
+			
+			if id_name.startswith('__'):
+				continue
+				
+			id_split = id_name.split('_OT_', 1)
+			
+			if len(id_split) == 2:
+				submodules.add(id_split[0].lower())
+			else:
+				submodules.add(id_split[0])
+		
+		return list(submodules)
+		
+	def __repr__(self):
+		return "<module like class 'bpy.ops'>"
+
+
+class bpy_ops_submodule(object):
+	'''
+	Utility class to fake submodules.
+	
+	eg. bpy.ops.object
+	'''
+	__keys__ = ('module',)
+	
+	def __init__(self, module):
+		self.module = module
+		
+	def __getattr__(self, func):
+		'''
+		gets a bpy.ops.submodule function
+		'''
+		return bpy_ops_submodule_op(self.module, func)
+		
+	def __dir__(self):
+		
+		functions = set()
+		
+		module_upper = self.module.upper()
+		
+		for id_name in dir(bpy.__ops__):
+			
+			if id_name.startswith('__'):
+				continue
+			
+			id_split = id_name.split('_OT_', 1)
+			if len(id_split) == 2 and module_upper == id_split[0]:
+				functions.add(id_split[1])
+		
+		return list(functions)
+	
+	def __repr__(self):
+		return "<module like class 'bpy.ops.%s'>" % self.module
+
+class bpy_ops_submodule_op(object):
+	'''
+	Utility class to fake submodule operators.
+	
+	eg. bpy.ops.object.somefunc
+	'''
+	__keys__ = ('module', 'func')
+	def __init__(self, module, func):
+		self.module = module
+		self.func = func
+	
+	def __call__(self, **kw):
+		# submod.foo -> SUBMOD_OT_foo
+		id_name = self.module.upper() + '_OT_' + self.func
+		
+		# Get the operator from 
+		internal_op = getattr(bpy.__ops__, id_name)
+		
+		# Call the op
+		return internal_op(**kw)
+		
+	def __repr__(self):
+		return "<function bpy.ops.%s.%s at 0x%x'>" % (self.module, self.func, id(self))
+
+bpy.ops = bpy_ops()

Modified: branches/blender2.5/blender/release/ui/buttons_data_lattice.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_lattice.py	2009-07-17 11:28:44 UTC (rev 21661)
+++ branches/blender2.5/blender/release/ui/buttons_data_lattice.py	2009-07-17 12:26:40 UTC (rev 21662)
@@ -52,7 +52,7 @@
 		row.itemR(lat, "interpolation_type_w", expand=True)
 			
 		row = layout.row()
-		row.itemO("LATTICE_OT_make_regular")
+		row.itemO("lattice.make_regular")
 		row.itemR(lat, "outside")
 
 bpy.types.register(DATA_PT_context_lattice)

Modified: branches/blender2.5/blender/release/ui/buttons_data_mesh.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_mesh.py	2009-07-17 11:28:44 UTC (rev 21661)
+++ branches/blender2.5/blender/release/ui/buttons_data_mesh.py	2009-07-17 12:26:40 UTC (rev 21662)
@@ -68,15 +68,15 @@
 		row.template_list(ob, "materials", ob, "active_material_index")
 
 		col = row.column(align=True)
-		col.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", text="")
-		col.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="")
+		col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="")
+		col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="")
 
 		if context.edit_object:
 			row = layout.row(align=True)
 
-			row.itemO("OBJECT_OT_material_slot_assign", text="Assign")
-			row.itemO("OBJECT_OT_material_slot_select", text="Select")
-			row.itemO("OBJECT_OT_material_slot_deselect", text="Deselect")
+			row.itemO("object.material_slot_assign", text="Assign")
+			row.itemO("object.material_slot_select", text="Select")
+			row.itemO("object.material_slot_deselect", text="Deselect")
 
 		"""
 		layout.itemS()
@@ -87,8 +87,8 @@
 		row.template_list(ob, "materials", ob, "active_material_index", compact=True)
 
 		subrow = row.row(align=True)
-		subrow.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", text="")
-		subrow.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="")
+		subrow.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="")
+		subrow.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="")
 		"""
 
 class DATA_PT_vertex_groups(DataButtonsPanel):
@@ -107,20 +107,20 @@
 		row.template_list(ob, "vertex_groups", ob, "active_vertex_group_index")
 
 		col = row.column(align=True)
-		col.itemO("OBJECT_OT_vertex_group_add", icon="ICON_ZOOMIN", text="")
-		col.itemO("OBJECT_OT_vertex_group_remove", icon="ICON_ZOOMOUT", text="")
+		col.itemO("object.vertex_group_add", icon="ICON_ZOOMIN", text="")
+		col.itemO("object.vertex_group_remove", icon="ICON_ZOOMOUT", text="")
 
-		col.itemO("OBJECT_OT_vertex_group_copy", icon="ICON_BLANK1", text="")
+		col.itemO("object.vertex_group_copy", icon="ICON_BLANK1", text="")
 		if ob.data.users > 1:
-			col.itemO("OBJECT_OT_vertex_group_copy_to_linked", icon="ICON_BLANK1", text="")
+			col.itemO("object.vertex_group_copy_to_linked", icon="ICON_BLANK1", text="")
 
 		if context.edit_object:
 			row = layout.row(align=True)
 
-			row.itemO("OBJECT_OT_vertex_group_assign", text="Assign")
-			row.itemO("OBJECT_OT_vertex_group_remove_from", text="Remove")
-			row.itemO("OBJECT_OT_vertex_group_select", text="Select")
-			row.itemO("OBJECT_OT_vertex_group_deselect", text="Deselect")
+			row.itemO("object.vertex_group_assign", text="Assign")
+			row.itemO("object.vertex_group_remove_from", text="Remove")
+			row.itemO("object.vertex_group_select", text="Select")
+			row.itemO("object.vertex_group_deselect", text="Deselect")
 
 			layout.itemR(context.tool_settings, "vertex_group_weight", text="Weight")
 
@@ -143,8 +143,8 @@
 		col = row.column()
 
 		subcol = col.column(align=True)
-		subcol.itemO("OBJECT_OT_shape_key_add", icon="ICON_ZOOMIN", text="")
-		subcol.itemO("OBJECT_OT_shape_key_remove", icon="ICON_ZOOMOUT", text="")
+		subcol.itemO("object.shape_key_add", icon="ICON_ZOOMIN", text="")
+		subcol.itemO("object.shape_key_remove", icon="ICON_ZOOMOUT", text="")
 
 		if kb:
 			col.itemS()
@@ -189,8 +189,8 @@
 		row.template_list(me, "uv_textures", me, "active_uv_texture_index")
 
 		col = row.column(align=True)
-		col.itemO("MESH_OT_uv_texture_add", icon="ICON_ZOOMIN", text="")
-		col.itemO("MESH_OT_uv_texture_remove", icon="ICON_ZOOMOUT", text="")
+		col.itemO("mesh.uv_texture_add", icon="ICON_ZOOMIN", text="")
+		col.itemO("mesh.uv_texture_remove", icon="ICON_ZOOMOUT", text="")
 
 class DATA_PT_vertex_colors(DataButtonsPanel):
 	__idname__ = "DATA_PT_vertex_colors"
@@ -205,8 +205,8 @@
 		row.template_list(me, "vertex_colors", me, "active_vertex_color_index")
 
 		col = row.column(align=True)
-		col.itemO("MESH_OT_vertex_color_add", icon="ICON_ZOOMIN", text="")
-		col.itemO("MESH_OT_vertex_color_remove", icon="ICON_ZOOMOUT", text="")
+		col.itemO("mesh.vertex_color_add", icon="ICON_ZOOMIN", text="")
+		col.itemO("mesh.vertex_color_remove", icon="ICON_ZOOMOUT", text="")
 
 bpy.types.register(DATA_PT_context_mesh)
 bpy.types.register(DATA_PT_mesh)

Modified: branches/blender2.5/blender/release/ui/buttons_data_modifier.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_data_modifier.py	2009-07-17 11:28:44 UTC (rev 21661)
+++ branches/blender2.5/blender/release/ui/buttons_data_modifier.py	2009-07-17 12:26:40 UTC (rev 21662)
@@ -15,7 +15,7 @@
 		layout = self.layout
 
 		row = layout.row()
-		row.item_menu_enumO("OBJECT_OT_modifier_add", "type")
+		row.item_menu_enumO("object.modifier_add", "type")
 		row.itemL();
 
 		for md in ob.modifiers:
@@ -264,7 +264,7 @@
 		layout.itemR(md, "invert")
 
 		layout.itemS()
-		layout.itemO("OBJECT_OT_modifier_mdef_bind", text="Bind")
+		layout.itemO("object.modifier_mdef_bind", text="Bind")
 		row = layout.row()
 		row.itemR(md, "precision")
 		row.itemR(md, "dynamic")
@@ -289,7 +289,7 @@
 		
 	def multires(self, layout, ob, md):
 		layout.itemR(md, "subdivision_type")
-		layout.itemO("OBJECT_OT_multires_subdivide", text="Subdivide")
+		layout.itemO("object.multires_subdivide", text="Subdivide")
 		layout.itemR(md, "level")
 	
 	def particleinstance(self, layout, ob, md):

Modified: branches/blender2.5/blender/release/ui/buttons_material.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_material.py	2009-07-17 11:28:44 UTC (rev 21661)
+++ branches/blender2.5/blender/release/ui/buttons_material.py	2009-07-17 12:26:40 UTC (rev 21662)
@@ -40,13 +40,13 @@
 			row.template_list(ob, "materials", ob, "active_material_index")
 
 			col = row.column(align=True)
-			col.itemO("OBJECT_OT_material_slot_add", icon="ICON_ZOOMIN", text="")
-			col.itemO("OBJECT_OT_material_slot_remove", icon="ICON_ZOOMOUT", text="")
+			col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="")
+			col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="")
 
 		split = layout.split(percentage=0.65)
 
 		if ob and slot:
-			split.template_ID(slot, "material", new="MATERIAL_OT_new")
+			split.template_ID(slot, "material", new="material.new")
 			row = split.row()
 			row.itemR(slot, "link", expand=True)
 		elif mat:

Modified: branches/blender2.5/blender/release/ui/buttons_object_constraint.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_object_constraint.py	2009-07-17 11:28:44 UTC (rev 21661)
+++ branches/blender2.5/blender/release/ui/buttons_object_constraint.py	2009-07-17 12:26:40 UTC (rev 21662)
@@ -110,8 +110,8 @@
 		sub.itemR(con, "sizez", text="Z")
 		
 		row = layout.row()
-		row.itemO("CONSTRAINT_OT_childof_set_inverse")
-		row.itemO("CONSTRAINT_OT_childof_clear_inverse")
+		row.itemO("constraint.childof_set_inverse")
+		row.itemO("constraint.childof_clear_inverse")
 		
 	def track_to(self, layout, con):
 		self.target_template(layout, con)
@@ -521,7 +521,7 @@
 		layout = self.layout
 
 		row = layout.row()

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list