Merge pull request #3854 from pypeclub/feature/OP-3940_Photoshop-workfile-version-corresponds-with-render-version

Photoshop: synchronize image version with workfile
This commit is contained in:
Petr Kalis 2022-09-20 11:36:42 +02:00 committed by GitHub
commit c22bcbf446
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 100 additions and 1 deletions

View file

@ -0,0 +1,55 @@
"""Collects published version of workfile and increments it.
For synchronization of published image and workfile version it is required
to store workfile version from workfile file name in context.data["version"].
In remote publishing this name is unreliable (artist might not follow naming
convention etc.), last published workfile version for particular workfile
subset is used instead.
This plugin runs only in remote publishing (eg. Webpublisher).
Requires:
context.data["assetEntity"]
Provides:
context["version"] - incremented latest published workfile version
"""
import pyblish.api
from openpype.client import get_last_version_by_subset_name
class CollectPublishedVersion(pyblish.api.ContextPlugin):
"""Collects published version of workfile and increments it."""
order = pyblish.api.CollectorOrder + 0.190
label = "Collect published version"
hosts = ["photoshop"]
targets = ["remotepublish"]
def process(self, context):
workfile_subset_name = None
for instance in context:
if instance.data["family"] == "workfile":
workfile_subset_name = instance.data["subset"]
break
if not workfile_subset_name:
self.log.warning("No workfile instance found, "
"synchronization of version will not work.")
return
project_name = context.data["projectName"]
asset_doc = context.data["assetEntity"]
asset_id = asset_doc["_id"]
version_doc = get_last_version_by_subset_name(project_name,
workfile_subset_name,
asset_id)
version_int = 1
if version_doc:
version_int += int(version_doc["name"])
self.log.debug(f"Setting {version_int} to context.")
context.data["version"] = version_int

View file

@ -0,0 +1,24 @@
import pyblish.api
class CollectVersion(pyblish.api.InstancePlugin):
"""Collect version for publishable instances.
Used to synchronize version from workfile to all publishable instances:
- image (manually created or color coded)
- review
Dev comment:
Explicit collector created to control this from single place and not from
3 different.
"""
order = pyblish.api.CollectorOrder + 0.200
label = 'Collect Version'
hosts = ["photoshop"]
families = ["image", "review"]
def process(self, instance):
workfile_version = instance.context.data["version"]
self.log.debug(f"Applying version {workfile_version}")
instance.data["version"] = workfile_version

View file

@ -187,7 +187,7 @@ class PypeCommands:
(to choose validator for example)
"""
from openpype.hosts.webpublisher.cli_functions import (
from openpype.hosts.webpublisher.publish_functions import (
cli_publish_from_app
)

View file

@ -15,6 +15,9 @@
"CollectInstances": {
"flatten_subset_template": ""
},
"CollectVersion": {
"enabled": false
},
"ValidateContainers": {
"enabled": true,
"optional": true,

View file

@ -131,6 +131,23 @@
}
]
},
{
"type": "dict",
"collapsible": true,
"key": "CollectVersion",
"label": "Collect Version",
"children": [
{
"type": "label",
"label": "Synchronize version for image and review instances by workfile version."
},
{
"type": "boolean",
"key": "enabled",
"label": "Enabled"
}
]
},
{
"type": "schema_template",
"name": "template_publish_plugin",