ayon-core/openpype/tools/workfiles
2021-06-02 12:29:04 +02:00
..
__init__.py rename folder 2021-04-01 18:54:46 +02:00
app.py Workfiles tool has set current asset btn 2021-06-02 12:29:04 +02:00
model.py rename folder 2021-04-01 18:54:46 +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