Skip to content
This repository has been archived by the owner on Sep 20, 2024. It is now read-only.

OpenPypeV3: add key task type, task shortname and user to path templating construction #2157

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,8 @@ def get_instances(self, context):
# because of using 'renderFarm' as a family, replace 'Farm' with
# capitalized task name - issue of avalon-core Creator app
subset_name = node.split("/")[1]
task_name = context.data["anatomyData"]["task"].capitalize()
task_name = context.data["anatomyData"]["task"][
"name"].capitalize()
replace_str = ""
if task_name.lower() not in subset_name.lower():
replace_str = task_name
Expand Down
2 changes: 1 addition & 1 deletion openpype/hosts/harmony/plugins/publish/collect_palettes.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def process(self, context):

# skip collecting if not in allowed task
if self.allowed_tasks:
task_name = context.data["anatomyData"]["task"].lower()
task_name = context.data["anatomyData"]["task"]["name"].lower()
if (not any([re.search(pattern, task_name)
for pattern in self.allowed_tasks])):
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,22 @@ def process(self, instance):

# fix anatomy data
anatomy_data_new = copy.deepcopy(anatomy_data)

project_entity = context.data["projectEntity"]
asset_entity = context.data["assetEntity"]

task_type = asset_entity["data"]["tasks"].get(task, {}).get("type")
project_task_types = project_entity["config"]["tasks"]
task_code = project_task_types.get(task_type, {}).get("short_name")

# updating hierarchy data
anatomy_data_new.update({
"asset": asset_data["name"],
"task": task,
"task": {
"name": task,
"type": task_type,
"short": task_code,
},
"subset": subset_name
})

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def process(self, instance):
anatomy_data = instance.context.data["anatomyData"]
repres = instance.data["representations"]
files = repres[0]["files"]
project_entity = context.data["projectEntity"]

if files.endswith(".zip"):
# A zip file was dropped
Expand All @@ -45,14 +46,24 @@ def process(self, instance):

self.log.info("Copied data: {}".format(new_instance.data))

task_type = asset_data["data"]["tasks"].get(task, {}).get("type")
project_task_types = project_entity["config"]["tasks"]
task_code = project_task_types.get(task_type, {}).get("short_name")

# fix anatomy data
anatomy_data_new = copy.deepcopy(anatomy_data)
# updating hierarchy data
anatomy_data_new.update({
"asset": asset_data["name"],
"task": task,
"subset": subset_name
})
anatomy_data_new.update(
{
"asset": asset_data["name"],
"task": {
"name": task,
"type": task_type,
"short": task_code,
},
"subset": subset_name
}
)

new_instance.data["label"] = f"{instance_name}"
new_instance.data["subset"] = subset_name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import pyblish.api
from avalon import api, io
import openpype.api
from openpype.lib import get_workfile_template_key_from_context
from openpype.lib import get_workfile_template_key


class ExtractHarmonyZip(openpype.api.Extractor):
Expand All @@ -31,8 +31,10 @@ class ExtractHarmonyZip(openpype.api.Extractor):

# Presets
create_workfile = True
default_task = "harmonyIngest"
default_task_type = "Ingest"
default_task = {
"name": "harmonyIngest",
"type": "Ingest",
}
default_task_status = "Ingested"
assetversion_status = "Ingested"

Expand Down Expand Up @@ -219,6 +221,19 @@ def extract_workfile(self, instance, staging_scene):
# Setup the data needed to form a valid work path filename
anatomy = openpype.api.Anatomy()
project_entity = instance.context.data["projectEntity"]
asset_entity = io.find_one({
"type": "asset",
"name": instance.data["asset"]
})

task_name = instance.data.get("task")
task_type = asset_entity["data"]["tasks"][task_name].get("type")

if task_type:
task_short = project_entity["config"]["tasks"].get(
task_type, {}).get("short_name")
else:
task_short = None

data = {
"root": api.registered_root(),
Expand All @@ -229,18 +244,20 @@ def extract_workfile(self, instance, staging_scene):
"asset": instance.data["asset"],
"hierarchy": openpype.api.get_hierarchy(instance.data["asset"]),
"family": instance.data["family"],
"task": instance.data.get("task"),
"task": {
"name": task_name,
"type": task_type,
"short": task_short,
},
"subset": instance.data["subset"],
"version": 1,
"ext": "zip",
}
host_name = "harmony"
template_name = get_workfile_template_key_from_context(
instance.data["asset"],
instance.data.get("task"),
template_name = get_workfile_template_key(
instance.data.get("task").get("type"),
host_name,
project_name=project_entity["name"],
dbcon=io
)

# Get a valid work filename first with version 1
Expand Down
12 changes: 12 additions & 0 deletions openpype/lib/anatomy.py
Original file line number Diff line number Diff line change
Expand Up @@ -989,6 +989,14 @@ def _format(self, orig_template, data):
invalid_required = []
missing_required = []
replace_keys = []

task_data = data.get("task")
if (
isinstance(task_data, StringType)
and "{task[name]}" in orig_template
):
data["task"] = {"name": task_data}

for group in self.key_pattern.findall(template):
orig_key = group[1:-1]
key = str(orig_key)
Expand Down Expand Up @@ -1074,6 +1082,10 @@ def solve_dict(self, templates, data):
output = collections.defaultdict(dict)
for key, orig_value in templates.items():
if isinstance(orig_value, StringType):
# Replace {task} by '{task[name]}' for backward compatibility
if '{task}' in orig_value:
orig_value = orig_value.replace('{task}', '{task[name]}')

output[key] = self._format(orig_value, data)
continue

Expand Down
23 changes: 8 additions & 15 deletions openpype/lib/applications.py
Original file line number Diff line number Diff line change
Expand Up @@ -1246,23 +1246,12 @@ def prepare_context_environments(data):

anatomy = data["anatomy"]

asset_tasks = asset_doc.get("data", {}).get("tasks") or {}
task_info = asset_tasks.get(task_name) or {}
task_type = task_info.get("type")
task_type = workdir_data["task"]["type"]
# Temp solution how to pass task type to `_prepare_last_workfile`
data["task_type"] = task_type

workfile_template_key = get_workfile_template_key(
task_type,
app.host_name,
project_name=project_name,
project_settings=project_settings
)

try:
workdir = get_workdir_with_workdir_data(
workdir_data, anatomy, template_key=workfile_template_key
)
workdir = get_workdir_with_workdir_data(workdir_data, anatomy)

except Exception as exc:
raise ApplicationLaunchFailed(
Expand Down Expand Up @@ -1295,10 +1284,10 @@ def prepare_context_environments(data):
)
data["env"].update(context_env)

_prepare_last_workfile(data, workdir, workfile_template_key)
_prepare_last_workfile(data, workdir)


def _prepare_last_workfile(data, workdir, workfile_template_key):
def _prepare_last_workfile(data, workdir):
"""last workfile workflow preparation.

Function check if should care about last workfile workflow and tries
Expand Down Expand Up @@ -1361,6 +1350,10 @@ def _prepare_last_workfile(data, workdir, workfile_template_key):
anatomy = data["anatomy"]
# Find last workfile
file_template = anatomy.templates["work"]["file"]
# Replace {task} by '{task[name]}' for backward compatibility
if '{task}' in file_template:
file_template = file_template.replace('{task}', '{task[name]}')

workdir_data.update({
"version": 1,
"user": get_openpype_username(),
Expand Down
28 changes: 18 additions & 10 deletions openpype/lib/avalon_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import logging
import collections
import functools
import getpass

from openpype.settings import get_project_settings
from .anatomy import Anatomy
Expand Down Expand Up @@ -479,22 +480,31 @@ def get_workdir_data(project_doc, asset_doc, task_name, host_name):
"""
hierarchy = "/".join(asset_doc["data"]["parents"])

task_type = asset_doc['data']['tasks'].get(task_name, {}).get('type')

project_task_types = project_doc["config"]["tasks"]
task_code = project_task_types.get(task_type, {}).get("short_name")

data = {
"project": {
"name": project_doc["name"],
"code": project_doc["data"].get("code")
},
"task": task_name,
"task": {
"name": task_name,
"type": task_type,
"short": task_code,
},
"asset": asset_doc["name"],
"app": host_name,
"hierarchy": hierarchy
"user": getpass.getuser(),
"hierarchy": hierarchy,
}
return data


def get_workdir_with_workdir_data(
workdir_data, anatomy=None, project_name=None,
template_key=None, dbcon=None
workdir_data, anatomy=None, project_name=None, template_key=None
):
"""Fill workdir path from entered data and project's anatomy.

Expand Down Expand Up @@ -529,12 +539,10 @@ def get_workdir_with_workdir_data(
anatomy = Anatomy(project_name)

if not template_key:
template_key = get_workfile_template_key_from_context(
workdir_data["asset"],
workdir_data["task"],
template_key = get_workfile_template_key(
workdir_data["task"]["type"],
workdir_data["app"],
project_name=workdir_data["project"]["name"],
dbcon=dbcon
project_name=workdir_data["project"]["name"]
)

anatomy_filled = anatomy.format(workdir_data)
Expand Down Expand Up @@ -648,7 +656,7 @@ def create_workfile_doc(asset_doc, task_name, filename, workdir, dbcon=None):
anatomy = Anatomy(project_doc["name"])
# Get workdir path (result is anatomy.TemplateResult)
template_workdir = get_workdir_with_workdir_data(
workdir_data, anatomy, dbcon=dbcon
workdir_data, anatomy
)
template_workdir_path = str(template_workdir).replace("\\", "/")

Expand Down
12 changes: 11 additions & 1 deletion openpype/plugins/publish/collect_anatomy_context_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,24 @@ def process(self, context):
if hierarchy_items:
hierarchy = os.path.join(*hierarchy_items)

asset_tasks = asset_entity["data"]["tasks"]
task_type = asset_tasks.get(task_name, {}).get("type")

project_task_types = project_entity["config"]["tasks"]
task_code = project_task_types.get(task_type, {}).get("short_name")

context_data = {
"project": {
"name": project_entity["name"],
"code": project_entity["data"].get("code")
},
"asset": asset_entity["name"],
"hierarchy": hierarchy.replace("\\", "/"),
"task": task_name,
"task": {
"name": task_name,
"type": task_type,
"short": task_code,
},
"username": context.data["user"],
"app": context.data["hostName"]
}
Expand Down
15 changes: 14 additions & 1 deletion openpype/plugins/publish/collect_anatomy_instance_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,8 @@ def fill_anatomy_data(self, context):
project_doc = context.data["projectEntity"]
context_asset_doc = context.data["assetEntity"]

project_task_types = project_doc["config"]["tasks"]

for instance in context:
version_number = instance.data.get("version")
# If version is not specified for instance or context
Expand Down Expand Up @@ -240,7 +242,18 @@ def fill_anatomy_data(self, context):
# Task
task_name = instance.data.get("task")
if task_name:
anatomy_updates["task"] = task_name
asset_tasks = asset_doc["data"]["tasks"]
task_type = asset_tasks.get(task_name, {}).get("type")
task_code = (
project_task_types
.get(task_type, {})
.get("short_name")
)
anatomy_updates["task"] = {
"name": task_name,
"type": task_type,
"short": task_code
}

# Additional data
resolution_width = instance.data.get("resolutionWidth")
Expand Down
4 changes: 3 additions & 1 deletion openpype/plugins/publish/extract_burnin.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,9 @@ def main_process(self, instance):
for key in self.positions:
value = burnin_def.get(key)
if value:
burnin_values[key] = value
burnin_values[key] = value.replace(
"{task}", "{task[name]}"
)

# Remove "delete" tag from new representation
if "delete" in new_repre["tags"]:
Expand Down
Loading