How to set a custom default file from python

Hi all,
I am preparing the 3rd release of BlenderFDS (http://www.blenderfds.org), a preprocessor for fire simulation in civil buildings.

I need an operator that sets a new custom default file from python.

Ideally something like this would rock:
bpy.ops.wm.save_homefile(filepath=bf_default_filepath)
But save_homefile does not support filepath parameter.

So I tried the following code. But it does not work: the context.window is destroyed by open_mainfile and save_homefile complains about the wrong context.

<code>
class WM_OT_bf_set_bf_homefile(bpy.types.Operator):
bl_label = “Open and Set Default Settings”
bl_idname = “wm.bf_set_bf_homefile”
bl_description = “Set default settings for BlenderFDS”

     def execute(self, context):
                 bf_default_filepath = sys.path[0] + "/blenderfds/bf_default.blend"
                 bpy.ops.wm.open_mainfile(filepath=bf_default_filepath, load_ui=True, use_scripts=True) 
     bpy.ops.wm.save_homefile()
                 self.report({"INFO"}, "Default settings loaded")
     return {'FINISHED'}

<\code>

What do you suggest?

Thank you in advance,
Emanuele

It requires some hacking to solve it:

import bpy
from bpy.app.handlers import persistent
from bpy.path import basename

filepath = r"C:\Users\CoDEmanX\Desktop\Blender\CoD Blender\_dogtags.blend"

def save_homefile(scene):
    bpy.app.handlers.scene_update_post.remove(save_homefile)
    bpy.ops.wm.save_homefile()
    print("Saved homefile:
%s
" % basename(filepath))
    #bpy.context.window.cursor_modal_restore()

@persistent
def wait_load_homefile(scene):
    bpy.app.handlers.load_post.remove(wait_load_homefile)
    
    # NOTE: hourglass cursor after loading, wait for scene update to fix
    bpy.app.handlers.scene_update_post.append(save_homefile)


class SimpleOperator(bpy.types.Operator):
    """Tooltip"""
    bl_idname = "object.simple_operator"
    bl_label = "Simple Object Operator"

    @classmethod
    def poll(cls, context):
        return context.active_object is not None

    def execute(self, context):
        bpy.app.handlers.load_post.append(wait_load_homefile)
        bpy.ops.wm.open_mainfile(filepath=filepath)
        return {'FINISHED'}


def register():
    bpy.utils.register_class(SimpleOperator)


def unregister():
    bpy.utils.unregister_class(SimpleOperator)


if __name__ == "__main__":
    register()

    # test call
    bpy.ops.object.simple_operator()


Thank you very much indeed. This seems to solve my problem.

I am as well going to propose the addition of:
bpy.ops.wm.save_homefile(filepath=default_filepath)
to Blender.

Emanuele

Blender developers are awesome!
Brecht fixed save_homefile in a minute:
http://developer.blender.org/T37731

Now, my simpler original operator (and many others) work as intended.
Emanuele