I've used RickyBlender's script to do this
https://blenderartists.org/forum/sho...iral+and+helix


Is this correct or is there another way to funnel many into one function call with an arg?


Code:
import bpy


def do_something(s):
    print("DOING:", s)



#           ##########    FUNCTION STUBS     ###########
sprefix = "mesh.primitive_HELLO_add_"

class menu_func_00_00(bpy.types.Operator):
    bl_idname = sprefix+"00_00"
    bl_label = "Add menu_func_00_00 "
    bl_options = {'REGISTER', 'UNDO','BLOCKING'}
    def execute(self, context):
        do_something("hello from 00 00")
        return {'FINISHED'}

class menu_func_00_01(bpy.types.Operator):
    bl_idname = sprefix+"00_01"
    bl_label = "Add menu_func_00_01 "
    bl_options = {'REGISTER', 'UNDO','BLOCKING'}
    def execute(self, context):
        do_something("hello from 00 01")
        return {'FINISHED'}

class menu_func_01_00(bpy.types.Operator):
    bl_idname = sprefix+"01_00"
    bl_label = "Add menu_func_01_00 "
    bl_options = {'REGISTER', 'UNDO','BLOCKING'}
    def execute(self, context):
        do_something("hello from 01 00")
        return {'FINISHED'}

class menu_func_01_01(bpy.types.Operator):
    bl_idname = sprefix+"01_01"
    bl_label = "Add menu_func_01_01 "
    bl_options = {'REGISTER', 'UNDO','BLOCKING'}
    def execute(self, context):
        do_something("hello from 01 01")
        return {'FINISHED'}




#           ##########    SUB MENUS     ###########
class sub_menu_one(bpy.types.Menu):
    bl_idname = "sub_menu_one"
    bl_label = "experimental menu"
    
    def draw(self, context):
        layout = self.layout
        layout.operator_context = 'INVOKE_REGION_WIN'
        
        layout.operator(menu_func_00_00.bl_idname, text = "func 00 00")
        layout.operator(menu_func_00_01.bl_idname, text = "func 00 01")

class sub_menu_two(bpy.types.Menu):
    bl_idname = "sub_menu_two"
    bl_label = "experimental menu"
    
    def draw(self, context):
        layout = self.layout
        layout.operator_context = 'INVOKE_REGION_WIN'
        
        layout.operator(menu_func_01_00.bl_idname, text = "func 01 00")
        layout.operator(menu_func_01_01.bl_idname, text = "func 01 01")



#           ##########    MAIN MENU     ###########
class menu_main(bpy.types.Menu):
    #  PRIMARY MENU
    bl_idname = "menu_main"
    bl_label = "My Title"
    
    def draw(self,context):
        layout = self.layout
        layout.operator_context = 'INVOKE_REGION_WIN'
        
        layout.menu(sub_menu_one.bl_idname, text = "one")
        layout.menu(sub_menu_two.bl_idname, text = "two")


#           ##########    GUBBINS     ###########
def menu_func(self, context):
    self.layout.menu(menu_main.bl_idname, icon="PLUGIN")

def register():
    bpy.utils.register_module(__name__)
    
    bpy.types.INFO_MT_mesh_add.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    
    bpy.types.INFO_MT_mesh_add.remove(menu_func)

if __name__ == "__main__":
    register()