From 08d79e1a786ca0a01a50b7b781aaaf8c83b64371 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 7 Oct 2022 12:28:40 +0200 Subject: [PATCH 1/9] OP-3939 - added configuration of integrate profiles to Setting Integration of thumbnail representation could be controlled from single location with use of profiles. --- .../defaults/project_settings/global.json | 4 ++ .../schemas/schema_global_publish.json | 67 +++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/openpype/settings/defaults/project_settings/global.json b/openpype/settings/defaults/project_settings/global.json index 115a719995..1b7dc7a41a 100644 --- a/openpype/settings/defaults/project_settings/global.json +++ b/openpype/settings/defaults/project_settings/global.json @@ -164,6 +164,10 @@ } ] }, + "PreIntegrateThumbnails": { + "enabled": true, + "integrate_profiles": [] + }, "IntegrateSubsetGroup": { "subset_grouping_profiles": [ { diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json index 297f96aa8c..9a8d10a4e1 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json @@ -555,6 +555,73 @@ } ] }, + { + "type": "dict", + "collapsible": true, + "key": "PreIntegrateThumbnails", + "label": "Integrate Thumbnail Representations", + "is_group": true, + "checkbox_key": "enabled", + "children": [ + { + "type": "boolean", + "key": "enabled", + "label": "Enabled" + }, + { + "type": "label", + "label": "Explicitly set if Thumbnail representation should be integrated into DB.
If no matching profile set, existing state from Host implementation is kept." + }, + { + "type": "list", + "key": "integrate_profiles", + "label": "Integrate profiles", + "use_label_wrap": true, + "object_type": { + "type": "dict", + "children": [ + { + "key": "families", + "label": "Families", + "type": "list", + "object_type": "text" + }, + { + "type": "hosts-enum", + "key": "hosts", + "label": "Hosts", + "multiselection": true + }, + { + "key": "task_types", + "label": "Task types", + "type": "task-types-enum" + }, + { + "key": "tasks", + "label": "Task names", + "type": "list", + "object_type": "text" + }, + { + "key": "subsets", + "label": "Subset names", + "type": "list", + "object_type": "text" + }, + { + "type": "separator" + }, + { + "type": "boolean", + "key": "integrate_thumbnail", + "label": "Integrate thumbnail" + } + ] + } + } + ] + }, { "type": "dict", "collapsible": true, From 8b0e6410167d34a21d71bec3665ac67cb240b032 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 7 Oct 2022 12:30:21 +0200 Subject: [PATCH 2/9] OP-3939 - added plugin to update tags for thumbnail representation Integration of thumbnail could be explicitly controlled on one place, overwriting implicit state from host implementations. --- .../preintegrate_thumbnail_representation.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 openpype/plugins/publish/preintegrate_thumbnail_representation.py diff --git a/openpype/plugins/publish/preintegrate_thumbnail_representation.py b/openpype/plugins/publish/preintegrate_thumbnail_representation.py new file mode 100644 index 0000000000..0c3ba4057c --- /dev/null +++ b/openpype/plugins/publish/preintegrate_thumbnail_representation.py @@ -0,0 +1,68 @@ +""" Marks thumbnail representation for integrate to DB or not. + + Some hosts produce thumbnail representation, most of them do not create + them explicitly, but they created during extract phase. + + In some cases it might be useful to override implicit setting for host/task + + This plugin needs to run after extract phase, but before integrate.py as + thumbnail is part of review family and integrated there. + + It should be better to control integration of thumbnail in one place than + configure it in multiple places on host implementations. +""" +import pyblish.api + +from openpype.lib.profiles_filtering import filter_profiles + + +class PreIntegrateThumbnails(pyblish.api.InstancePlugin): + """Marks thumbnail representation for integrate to DB or not.""" + + label = "Should Integrate Thumbnails" + order = pyblish.api.IntegratorOrder + families = ["review"] + + integrate_profiles = {} + + def process(self, instance): + thumbnail_repre = None + for repre in instance.data["representations"]: + if repre["name"] == "thumbnail": + thumbnail_repre = repre + break + + if not thumbnail_repre: + return + + family = instance.data["family"] + subset_name = instance.data["subset"] + host_name = instance.context.data["hostName"] + + anatomy_data = instance.data["anatomyData"] + task = anatomy_data.get("task", {}) + + found_profile = filter_profiles( + self.integrate_profiles, + { + "hosts": host_name, + "tasks": task.get("name"), + "task_types": task.get("type"), + "families": family, + "subsets": subset_name, + }, + logger=self.log + ) + + if not found_profile: + return + + if not found_profile["integrate_thumbnail"]: + if "delete" not in thumbnail_repre["tags"]: + thumbnail_repre["tags"].append("delete") + else: + if "delete" in thumbnail_repre["tags"]: + thumbnail_repre["tags"].pop("delete") + + self.log.debug( + "Thumbnail repre tags {}".format(thumbnail_repre["tags"])) From 237a9fcf6cd990cfc72368cadb45b53b38565157 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 7 Oct 2022 12:30:38 +0200 Subject: [PATCH 3/9] OP-3939 - added bit of documentation --- openpype/plugins/publish/integrate_thumbnail.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/openpype/plugins/publish/integrate_thumbnail.py b/openpype/plugins/publish/integrate_thumbnail.py index d86cec10ad..e7046ba2ea 100644 --- a/openpype/plugins/publish/integrate_thumbnail.py +++ b/openpype/plugins/publish/integrate_thumbnail.py @@ -1,3 +1,13 @@ +""" Integrate Thumbnails for Openpype use in Loaders. + + This thumbnail is different from 'thumbnail' representation which could + be uploaded to Ftrack, or used as any other representation in Loaders to + pull into a scene. + + This one is used only as image describing content of published item and + shows up only in Loader in right column section. +""" + import os import sys import errno @@ -12,7 +22,7 @@ from openpype.client.operations import OperationsSession, new_thumbnail_doc class IntegrateThumbnails(pyblish.api.InstancePlugin): - """Integrate Thumbnails.""" + """Integrate Thumbnails for Openpype use in Loaders.""" label = "Integrate Thumbnails" order = pyblish.api.IntegratorOrder + 0.01 From 72e647a5b990411bd88d2f4e045fd66b906d0b7d Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Fri, 7 Oct 2022 13:10:56 +0200 Subject: [PATCH 4/9] OP-3939 - fix - must be before integrate.py --- .../plugins/publish/preintegrate_thumbnail_representation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/plugins/publish/preintegrate_thumbnail_representation.py b/openpype/plugins/publish/preintegrate_thumbnail_representation.py index 0c3ba4057c..a4ab0443c2 100644 --- a/openpype/plugins/publish/preintegrate_thumbnail_representation.py +++ b/openpype/plugins/publish/preintegrate_thumbnail_representation.py @@ -20,7 +20,7 @@ class PreIntegrateThumbnails(pyblish.api.InstancePlugin): """Marks thumbnail representation for integrate to DB or not.""" label = "Should Integrate Thumbnails" - order = pyblish.api.IntegratorOrder + order = pyblish.api.IntegratorOrder - 0.1 families = ["review"] integrate_profiles = {} From f7fdb10f6bf2fe6e36d7cf03348cb72fd8c06228 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 10 Oct 2022 10:54:06 +0200 Subject: [PATCH 5/9] OP-3939 - updated key for Settings --- .../plugins/publish/preintegrate_thumbnail_representation.py | 2 +- .../schemas/projects_schema/schemas/schema_global_publish.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/plugins/publish/preintegrate_thumbnail_representation.py b/openpype/plugins/publish/preintegrate_thumbnail_representation.py index a4ab0443c2..49e69ff34b 100644 --- a/openpype/plugins/publish/preintegrate_thumbnail_representation.py +++ b/openpype/plugins/publish/preintegrate_thumbnail_representation.py @@ -46,7 +46,7 @@ class PreIntegrateThumbnails(pyblish.api.InstancePlugin): self.integrate_profiles, { "hosts": host_name, - "tasks": task.get("name"), + "task_names": task.get("name"), "task_types": task.get("type"), "families": family, "subsets": subset_name, diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json index 9a8d10a4e1..c216d5fd9e 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json @@ -598,7 +598,7 @@ "type": "task-types-enum" }, { - "key": "tasks", + "key": "task_names", "label": "Task names", "type": "list", "object_type": "text" From 745ac4a2d26508e14f530851f33a75165e705309 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Mon, 10 Oct 2022 11:06:41 +0200 Subject: [PATCH 6/9] OP-3939 - updated loop through representations Co-authored-by: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> --- .../publish/preintegrate_thumbnail_representation.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openpype/plugins/publish/preintegrate_thumbnail_representation.py b/openpype/plugins/publish/preintegrate_thumbnail_representation.py index 49e69ff34b..2c25d2a2fc 100644 --- a/openpype/plugins/publish/preintegrate_thumbnail_representation.py +++ b/openpype/plugins/publish/preintegrate_thumbnail_representation.py @@ -26,8 +26,12 @@ class PreIntegrateThumbnails(pyblish.api.InstancePlugin): integrate_profiles = {} def process(self, instance): + repres = instance.data.get("representations") + if not repres: + return + thumbnail_repre = None - for repre in instance.data["representations"]: + for repre in repres: if repre["name"] == "thumbnail": thumbnail_repre = repre break From c7d2992b9d6cff3b9e939868639d2410e8b82067 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 12 Oct 2022 11:59:15 +0200 Subject: [PATCH 7/9] OP-3939 - fix wrong method to remove item --- .../plugins/publish/preintegrate_thumbnail_representation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/plugins/publish/preintegrate_thumbnail_representation.py b/openpype/plugins/publish/preintegrate_thumbnail_representation.py index 49e69ff34b..3ccaeed147 100644 --- a/openpype/plugins/publish/preintegrate_thumbnail_representation.py +++ b/openpype/plugins/publish/preintegrate_thumbnail_representation.py @@ -62,7 +62,7 @@ class PreIntegrateThumbnails(pyblish.api.InstancePlugin): thumbnail_repre["tags"].append("delete") else: if "delete" in thumbnail_repre["tags"]: - thumbnail_repre["tags"].pop("delete") + thumbnail_repre["tags"].remove("delete") self.log.debug( "Thumbnail repre tags {}".format(thumbnail_repre["tags"])) From 0d44dbc6c49ce80ddf9d8b4359dd5bdc2eafd9e8 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 12 Oct 2022 17:46:50 +0200 Subject: [PATCH 8/9] OP-3939 - changed label of plugin --- .../plugins/publish/preintegrate_thumbnail_representation.py | 2 +- .../schemas/projects_schema/schemas/schema_global_publish.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openpype/plugins/publish/preintegrate_thumbnail_representation.py b/openpype/plugins/publish/preintegrate_thumbnail_representation.py index d38f083876..5d3ea5654f 100644 --- a/openpype/plugins/publish/preintegrate_thumbnail_representation.py +++ b/openpype/plugins/publish/preintegrate_thumbnail_representation.py @@ -19,7 +19,7 @@ from openpype.lib.profiles_filtering import filter_profiles class PreIntegrateThumbnails(pyblish.api.InstancePlugin): """Marks thumbnail representation for integrate to DB or not.""" - label = "Should Integrate Thumbnails" + label = "Override Integrate Thumbnails" order = pyblish.api.IntegratorOrder - 0.1 families = ["review"] diff --git a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json index c216d5fd9e..773dea1229 100644 --- a/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json +++ b/openpype/settings/entities/schemas/projects_schema/schemas/schema_global_publish.json @@ -559,7 +559,7 @@ "type": "dict", "collapsible": true, "key": "PreIntegrateThumbnails", - "label": "Integrate Thumbnail Representations", + "label": "Override Integrate Thumbnail Representations", "is_group": true, "checkbox_key": "enabled", "children": [ From bfbf2a26a9b1a28e91a552cdbcf41cd6b5c24613 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 12 Oct 2022 18:22:57 +0200 Subject: [PATCH 9/9] OP-3939 - changed label of plugin --- .../plugins/publish/preintegrate_thumbnail_representation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openpype/plugins/publish/preintegrate_thumbnail_representation.py b/openpype/plugins/publish/preintegrate_thumbnail_representation.py index 5d3ea5654f..f9e23223e6 100644 --- a/openpype/plugins/publish/preintegrate_thumbnail_representation.py +++ b/openpype/plugins/publish/preintegrate_thumbnail_representation.py @@ -19,7 +19,7 @@ from openpype.lib.profiles_filtering import filter_profiles class PreIntegrateThumbnails(pyblish.api.InstancePlugin): """Marks thumbnail representation for integrate to DB or not.""" - label = "Override Integrate Thumbnails" + label = "Override Integrate Thumbnail Representations" order = pyblish.api.IntegratorOrder - 0.1 families = ["review"]