ayon-core/openpype/tools/workfiles
Roy Nieterau bb105209e8 Revert storing of messagebox
- This is NOT done because the original crash was reproducible - but just out of pure legacy reasons for if the error might still occur. It would be worth looking into whether the crash can still be reproduced in recent Blender versions without this logic.
2022-02-22 15:28:05 +01:00
..
__init__.py rename folder 2021-04-01 18:54:46 +02:00
app.py Revert storing of messagebox 2022-02-22 15:28:05 +01:00
model.py moved task model into tools/utils/models.py 2021-10-29 18:32:39 +02:00
README.md rename folder 2021-04-01 18:54:46 +02:00
view.py rename folder 2021-04-01 18:54:46 +02:00

Workfiles App

The Workfiles app facilitates easy saving, creation and launching of work files.

The current supported hosts are:

  • Maya
  • Houdini
  • Fusion

The app is available inside hosts via. the Avalon > Work Files menu.

Enabling Workfiles on launch

By default the Workfiles app will not launch on startup, so it has to be explicitly enabled in a config.

workfiles.show()

Naming Files

Workfiles app enables user to easily save and create new work files.

The user is presented with a two parameters; version and comment. The name of the work file is determined from a template.

Next Available Version

Will search for the next version number that is not in use.

Templates

The default template for work files is {task[name]}_v{version:0>4}<_{comment}>. Launching Maya on an animation task and creating a version 1 will result in animation_v0001.ma. Adding "blocking" to the optional comment input will result in animation_v0001_blocking.ma.

This template can be customized per project with the workfile template.

There are other variables to customize the template with:

{
    "project": project,  # The project data from the database.
    "asset": asset, # The asset data from the database.
    "task": {
        "label": label,  # Label of task chosen.
        "name": name  # Sanitize version of the label.
    },
    "user": user,  # Name of the user on the machine.
    "version": version,  # Chosen version of the user.
    "comment": comment,  # Chosen comment of the user.
}

Optional template groups

The default template contains an optional template group <_{comment}>. If any template group ({comment}) within angle bracket <> does not exist, the whole optional group is discarded.

Implementing a new host integration for Work Files

For the Work Files tool to work with a new host integration the host must implement the following functions:

  • file_extensions(): The files the host should allow to open and show in the Work Files view.
  • open_file(filepath): Open a file.
  • save_file(filepath): Save the current file. This should return None if it failed to save, and return the path if it succeeded
  • has_unsaved_changes(): Return whether the current scene has unsaved changes.
  • current_file(): The path to the current file. None if not saved.
  • work_root(): The path to where the work files for this app should be saved.

Here's an example code layout:

def file_extensions():
    """Return the filename extension formats that should be shown.

    Note:
        The first entry in the list will be used as the default file
        format to save to when the current scene is not saved yet.

    Returns:
        list: A list of the file extensions supported by Work Files.

    """
    return list()


def has_unsaved_changes():
    """Return whether current file has unsaved modifications."""


def save_file(filepath):
    """Save to filepath.
    
    This should return None if it failed to save, and return the path if it 
    succeeded.
    """
    pass


def open_file(filepath):
    """Open file"""
    pass


def current_file():
    """Return path to currently open file or None if not saved.

    Returns:
        str or None: The full path to current file or None when not saved.

    """
    pass


def work_root():
    """Return the default root for the Host to browse in for Work Files

    Returns:
        str: The path to look in.

    """
    pass

Work Files Scenes root (AVALON_SCENEDIR)

Whenever the host application has no built-in implementation that defines where scene files should be saved to then the Work Files API for that host should fall back to the AVALON_SCENEDIR variable in api.Session.

When AVALON_SCENEDIR is set the directory is the relative folder inside the AVALON_WORKDIR. Otherwise, when it is not set or empty it should fall back to the Work Directory's root, AVALON_WORKDIR

AVALON_WORKDIR="/path/to/work"
AVALON_SCENEDIR="scenes"
# Result: /path/to/work/scenes

AVALON_WORKDIR="/path/to/work"
AVALON_SCENEDIR=None
# Result: /path/to/work