Merge pull request #3068 from pypeclub/bugfix/OP-3103_Variant-value-is-missing-in-review-from-PS-via-WS

Webpublisher: Use variant value
This commit is contained in:
Petr Kalis 2022-04-21 10:23:35 +02:00 committed by GitHub
commit 6c42442f60
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 91 additions and 27 deletions

View file

@ -0,0 +1,73 @@
"""Parses batch context from json and continues in publish process.
Provides:
context -> Loaded batch file.
- asset
- task (task name)
- taskType
- project_name
- variant
Code is practically copy of `openype/hosts/webpublish/collect_batch_data` as
webpublisher should be eventually ejected as an addon, eg. mentioned plugin
shouldn't be pushed into general publish plugins.
"""
import os
import pyblish.api
from avalon import io
from openpype.lib.plugin_tools import (
parse_json,
get_batch_asset_task_info
)
class CollectBatchData(pyblish.api.ContextPlugin):
"""Collect batch data from json stored in 'OPENPYPE_PUBLISH_DATA' env dir.
The directory must contain 'manifest.json' file where batch data should be
stored.
"""
# must be really early, context values are only in json file
order = pyblish.api.CollectorOrder - 0.495
label = "Collect batch data"
hosts = ["photoshop"]
targets = ["remotepublish"]
def process(self, context):
self.log.info("CollectBatchData")
batch_dir = os.environ.get("OPENPYPE_PUBLISH_DATA")
assert batch_dir, (
"Missing `OPENPYPE_PUBLISH_DATA`")
assert os.path.exists(batch_dir), \
"Folder {} doesn't exist".format(batch_dir)
project_name = os.environ.get("AVALON_PROJECT")
if project_name is None:
raise AssertionError(
"Environment `AVALON_PROJECT` was not found."
"Could not set project `root` which may cause issues."
)
batch_data = parse_json(os.path.join(batch_dir, "manifest.json"))
context.data["batchDir"] = batch_dir
context.data["batchData"] = batch_data
asset_name, task_name, task_type = get_batch_asset_task_info(
batch_data["context"]
)
os.environ["AVALON_ASSET"] = asset_name
io.Session["AVALON_ASSET"] = asset_name
os.environ["AVALON_TASK"] = task_name
io.Session["AVALON_TASK"] = task_name
context.data["asset"] = asset_name
context.data["task"] = task_name
context.data["taskType"] = task_type
context.data["project_name"] = project_name
context.data["variant"] = batch_data["variant"]

View file

@ -4,7 +4,6 @@ import re
import pyblish.api
from openpype.lib import prepare_template_data
from openpype.lib.plugin_tools import parse_json, get_batch_asset_task_info
from openpype.hosts.photoshop import api as photoshop
@ -46,7 +45,10 @@ class CollectColorCodedInstances(pyblish.api.ContextPlugin):
existing_subset_names = self._get_existing_subset_names(context)
asset_name, task_name, variant = self._parse_batch(batch_dir)
# from CollectBatchData
asset_name = context.data["asset"]
task_name = context.data["task"]
variant = context.data["variant"]
stub = photoshop.stub()
layers = stub.get_layers()
@ -130,25 +132,6 @@ class CollectColorCodedInstances(pyblish.api.ContextPlugin):
return existing_subset_names
def _parse_batch(self, batch_dir):
"""Parses asset_name, task_name, variant from batch manifest."""
task_data = None
if batch_dir and os.path.exists(batch_dir):
task_data = parse_json(os.path.join(batch_dir,
"manifest.json"))
if not task_data:
raise ValueError(
"Cannot parse batch meta in {} folder".format(batch_dir))
variant = task_data["variant"]
asset, task_name, task_type = get_batch_asset_task_info(
task_data["context"])
if not task_name:
task_name = task_type
return asset, task_name, variant
def _create_instance(self, context, layer, family,
asset, subset, task_name):
instance = context.create_instance(layer.name)

View file

@ -82,8 +82,9 @@ class CollectInstances(pyblish.api.ContextPlugin):
task_name = api.Session["AVALON_TASK"]
asset_name = context.data["assetEntity"]["name"]
variant = context.data.get("variant") or variants[0]
fill_pairs = {
"variant": variants[0],
"variant": variant,
"family": family,
"task": task_name
}

View file

@ -16,7 +16,7 @@ class CollectReview(pyblish.api.ContextPlugin):
family = "review"
subset = get_subset_name_with_asset_doc(
family,
"",
context.data.get("variant", ''),
context.data["anatomyData"]["task"]["name"],
context.data["assetEntity"],
context.data["anatomyData"]["project"]["name"],

View file

@ -1,7 +1,12 @@
"""Loads batch context from json and continues in publish process.
"""Parses batch context from json and continues in publish process.
Provides:
context -> Loaded batch file.
- asset
- task (task name)
- taskType
- project_name
- variant
"""
import os
@ -24,7 +29,7 @@ class CollectBatchData(pyblish.api.ContextPlugin):
# must be really early, context values are only in json file
order = pyblish.api.CollectorOrder - 0.495
label = "Collect batch data"
host = ["webpublisher"]
hosts = ["webpublisher"]
def process(self, context):
batch_dir = os.environ.get("OPENPYPE_PUBLISH_DATA")
@ -60,6 +65,7 @@ class CollectBatchData(pyblish.api.ContextPlugin):
context.data["task"] = task_name
context.data["taskType"] = task_type
context.data["project_name"] = project_name
context.data["variant"] = batch_data["variant"]
self._set_ctx_path(batch_data)

View file

@ -40,7 +40,7 @@ class CollectPublishedFiles(pyblish.api.ContextPlugin):
# must be really early, context values are only in json file
order = pyblish.api.CollectorOrder - 0.490
label = "Collect rendered frames"
host = ["webpublisher"]
hosts = ["webpublisher"]
targets = ["filespublish"]
# from Settings
@ -61,6 +61,7 @@ class CollectPublishedFiles(pyblish.api.ContextPlugin):
task_name = context.data["task"]
task_type = context.data["taskType"]
project_name = context.data["project_name"]
variant = context.data["variant"]
for task_dir in task_subfolders:
task_data = parse_json(os.path.join(task_dir,
"manifest.json"))
@ -76,7 +77,7 @@ class CollectPublishedFiles(pyblish.api.ContextPlugin):
extension.replace(".", ''))
subset_name = get_subset_name_with_asset_doc(
family, task_data["variant"], task_name, asset_doc,
family, variant, task_name, asset_doc,
project_name=project_name, host_name="webpublisher"
)
version = self._get_last_version(asset_name, subset_name) + 1