mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #237 from ynput/bugfix/workfiles-tool-templates
Workfiles tool: Fix work with anatomy templates
This commit is contained in:
commit
8a39bd0fc8
1 changed files with 71 additions and 17 deletions
|
|
@ -25,7 +25,14 @@ from ayon_core.tools.workfiles.abstract import (
|
||||||
|
|
||||||
|
|
||||||
class CommentMatcher(object):
|
class CommentMatcher(object):
|
||||||
"""Use anatomy and work file data to parse comments from filenames"""
|
"""Use anatomy and work file data to parse comments from filenames.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
extensions (set[str]): Set of extensions.
|
||||||
|
file_template (AnatomyStringTemplate): File template.
|
||||||
|
data (dict[str, Any]): Data to fill the template with.
|
||||||
|
|
||||||
|
"""
|
||||||
def __init__(self, extensions, file_template, data):
|
def __init__(self, extensions, file_template, data):
|
||||||
self.fname_regex = None
|
self.fname_regex = None
|
||||||
|
|
||||||
|
|
@ -199,6 +206,22 @@ class WorkareaModel:
|
||||||
def _get_last_workfile_version(
|
def _get_last_workfile_version(
|
||||||
self, workdir, file_template, fill_data, extensions
|
self, workdir, file_template, fill_data, extensions
|
||||||
):
|
):
|
||||||
|
"""
|
||||||
|
|
||||||
|
Todos:
|
||||||
|
Validate if logic of this function is correct. It does return
|
||||||
|
last version + 1 which might be wrong.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
workdir (str): Workdir path.
|
||||||
|
file_template (str): File template.
|
||||||
|
fill_data (dict[str, Any]): Fill data.
|
||||||
|
extensions (set[str]): Extensions.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: Next workfile version.
|
||||||
|
|
||||||
|
"""
|
||||||
version = get_last_workfile_with_version(
|
version = get_last_workfile_with_version(
|
||||||
workdir, file_template, fill_data, extensions
|
workdir, file_template, fill_data, extensions
|
||||||
)[1]
|
)[1]
|
||||||
|
|
@ -225,8 +248,21 @@ class WorkareaModel:
|
||||||
root,
|
root,
|
||||||
current_filename,
|
current_filename,
|
||||||
):
|
):
|
||||||
|
"""Get comments from root directory.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_template (AnatomyStringTemplate): File template.
|
||||||
|
extensions (set[str]): Extensions.
|
||||||
|
fill_data (dict[str, Any]): Fill data.
|
||||||
|
root (str): Root directory.
|
||||||
|
current_filename (str): Current filename.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Tuple[list[str], Union[str, None]]: Comment hints and current
|
||||||
|
comment.
|
||||||
|
|
||||||
|
"""
|
||||||
current_comment = None
|
current_comment = None
|
||||||
comment_hints = set()
|
|
||||||
filenames = []
|
filenames = []
|
||||||
if root and os.path.exists(root):
|
if root and os.path.exists(root):
|
||||||
for filename in os.listdir(root):
|
for filename in os.listdir(root):
|
||||||
|
|
@ -239,10 +275,11 @@ class WorkareaModel:
|
||||||
filenames.append(filename)
|
filenames.append(filename)
|
||||||
|
|
||||||
if not filenames:
|
if not filenames:
|
||||||
return comment_hints, current_comment
|
return [], current_comment
|
||||||
|
|
||||||
matcher = CommentMatcher(extensions, file_template, fill_data)
|
matcher = CommentMatcher(extensions, file_template, fill_data)
|
||||||
|
|
||||||
|
comment_hints = set()
|
||||||
for filename in filenames:
|
for filename in filenames:
|
||||||
comment = matcher.parse_comment(filename)
|
comment = matcher.parse_comment(filename)
|
||||||
if comment:
|
if comment:
|
||||||
|
|
@ -259,18 +296,18 @@ class WorkareaModel:
|
||||||
return directory_template.format_strict(fill_data).normalized()
|
return directory_template.format_strict(fill_data).normalized()
|
||||||
|
|
||||||
def get_workarea_save_as_data(self, folder_id, task_id):
|
def get_workarea_save_as_data(self, folder_id, task_id):
|
||||||
folder = None
|
folder_entity = None
|
||||||
task = None
|
task_entity = None
|
||||||
if folder_id:
|
if folder_id:
|
||||||
folder = self._controller.get_folder_entity(
|
folder_entity = self._controller.get_folder_entity(
|
||||||
self.project_name, folder_id
|
self.project_name, folder_id
|
||||||
)
|
)
|
||||||
if task_id:
|
if folder_entity and task_id:
|
||||||
task = self._controller.get_task_entity(
|
task_entity = self._controller.get_task_entity(
|
||||||
self.project_name, task_id
|
self.project_name, task_id
|
||||||
)
|
)
|
||||||
|
|
||||||
if not folder or not task:
|
if not folder_entity or not task_entity:
|
||||||
return {
|
return {
|
||||||
"template_key": None,
|
"template_key": None,
|
||||||
"template_has_version": None,
|
"template_has_version": None,
|
||||||
|
|
@ -302,10 +339,11 @@ class WorkareaModel:
|
||||||
|
|
||||||
file_template = anatomy.get_template_item(
|
file_template = anatomy.get_template_item(
|
||||||
"work", template_key, "file"
|
"work", template_key, "file"
|
||||||
).template
|
)
|
||||||
|
file_template_str = file_template.template
|
||||||
|
|
||||||
template_has_version = "{version" in file_template
|
template_has_version = "{version" in file_template_str
|
||||||
template_has_comment = "{comment" in file_template
|
template_has_comment = "{comment" in file_template_str
|
||||||
|
|
||||||
comment_hints, comment = self._get_comments_from_root(
|
comment_hints, comment = self._get_comments_from_root(
|
||||||
file_template,
|
file_template,
|
||||||
|
|
@ -315,7 +353,8 @@ class WorkareaModel:
|
||||||
current_filename,
|
current_filename,
|
||||||
)
|
)
|
||||||
last_version = self._get_last_workfile_version(
|
last_version = self._get_last_workfile_version(
|
||||||
workdir, file_template, fill_data, extensions)
|
workdir, file_template_str, fill_data, extensions
|
||||||
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"template_key": template_key,
|
"template_key": template_key,
|
||||||
|
|
@ -338,19 +377,34 @@ class WorkareaModel:
|
||||||
version,
|
version,
|
||||||
comment,
|
comment,
|
||||||
):
|
):
|
||||||
|
"""Fill workarea filepath based on context.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
folder_id (str): Folder id.
|
||||||
|
task_id (str): Task id.
|
||||||
|
extension (str): File extension.
|
||||||
|
use_last_version (bool): Use last version.
|
||||||
|
version (int): Version number.
|
||||||
|
comment (str): Comment.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
WorkareaFilepathResult: Workarea filepath result.
|
||||||
|
|
||||||
|
"""
|
||||||
anatomy = self._controller.project_anatomy
|
anatomy = self._controller.project_anatomy
|
||||||
fill_data = self._prepare_fill_data(folder_id, task_id)
|
fill_data = self._prepare_fill_data(folder_id, task_id)
|
||||||
|
|
||||||
template_key = self._get_template_key(fill_data)
|
template_key = self._get_template_key(fill_data)
|
||||||
|
|
||||||
workdir = self._get_workdir(anatomy, template_key, fill_data)
|
workdir = self._get_workdir(anatomy, template_key, fill_data)
|
||||||
|
|
||||||
file_template = anatomy.get_template_item(
|
file_template = anatomy.get_template_item(
|
||||||
"work", template_key, "file"
|
"work", template_key, "file"
|
||||||
).template
|
)
|
||||||
|
|
||||||
if use_last_version:
|
if use_last_version:
|
||||||
version = self._get_last_workfile_version(
|
version = self._get_last_workfile_version(
|
||||||
workdir, file_template, fill_data, self._extensions
|
workdir, file_template.template, fill_data, self._extensions
|
||||||
)
|
)
|
||||||
fill_data["version"] = version
|
fill_data["version"] = version
|
||||||
fill_data["ext"] = extension.lstrip(".")
|
fill_data["ext"] = extension.lstrip(".")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue