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

Photoshop: implemented {layer} placeholder in subset template #3591

41 changes: 32 additions & 9 deletions openpype/hosts/photoshop/plugins/create/create_image.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import re

from openpype.hosts.photoshop import api
from openpype.lib import BoolDef
from openpype.pipeline import (
Creator,
CreatedInstance,
legacy_io
)
from openpype.lib import prepare_template_data
from openpype.pipeline.create import SUBSET_NAME_ALLOWED_SYMBOLS


class ImageCreator(Creator):
Expand Down Expand Up @@ -38,17 +42,24 @@ def create(self, subset_name_from_ui, data, pre_create_data):
top_level_selected_items = stub.get_selected_layers()
if pre_create_data.get("use_selection"):
only_single_item_selected = len(top_level_selected_items) == 1
for selected_item in top_level_selected_items:
if (
only_single_item_selected or
pre_create_data.get("create_multiple")):
if (
only_single_item_selected or
pre_create_data.get("create_multiple")):
for selected_item in top_level_selected_items:
if selected_item.group:
groups_to_create.append(selected_item)
else:
top_layers_to_wrap.append(selected_item)
else:
group = stub.group_selected_layers(subset_name_from_ui)
groups_to_create.append(group)
else:
group = stub.group_selected_layers(subset_name_from_ui)
groups_to_create.append(group)
else:
stub.select_layers(stub.get_layers())
try:
group = stub.group_selected_layers(subset_name_from_ui)
except:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do not use bare except:, it also catches unexpected events like memory errors, interrupts, system exit, and so on. Prefer except Exception:. If you're sure what you're doing, be explicit and write except BaseException:.
do not use bare 'except'

raise ValueError("Cannot group locked Bakcground layer!")
groups_to_create.append(group)

if not groups_to_create and not top_layers_to_wrap:
group = stub.create_group(subset_name_from_ui)
Expand All @@ -60,15 +71,24 @@ def create(self, subset_name_from_ui, data, pre_create_data):
group = stub.group_selected_layers(layer.name)
groups_to_create.append(group)

layer_name = ''
creating_multiple_groups = len(groups_to_create) > 1
for group in groups_to_create:
subset_name = subset_name_from_ui # reset to name from creator UI
layer_names_in_hierarchy = []
created_group_name = self._clean_highlights(stub, group.name)

if creating_multiple_groups:
# concatenate with layer name to differentiate subsets
subset_name += group.name.title().replace(" ", "")
layer_name = re.sub(
"[^{}]+".format(SUBSET_NAME_ALLOWED_SYMBOLS),
"",
group.name
)
if "{layer}" not in subset_name.lower():
subset_name += "{Layer}"

layer_fill = prepare_template_data({"layer": layer_name})
subset_name = subset_name.format(**layer_fill)

if group.long_name:
for directory in group.long_name[::-1]:
Expand Down Expand Up @@ -143,3 +163,6 @@ def _handle_legacy(self, instance_data):
def _clean_highlights(self, stub, item):
return item.replace(stub.PUBLISH_ICON, '').replace(stub.LOADED_ICON,
'')
@classmethod
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

expected 1 blank line, found 0

def get_dynamic_data(cls, *args, **kwargs):
return {"layer": "{layer}"}
21 changes: 20 additions & 1 deletion openpype/hosts/photoshop/plugins/create/create_legacy_image.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import re

from Qt import QtWidgets
from openpype.pipeline import create
from openpype.hosts.photoshop import api as photoshop

from openpype.lib import prepare_template_data
from openpype.pipeline.create import SUBSET_NAME_ALLOWED_SYMBOLS


class CreateImage(create.LegacyCreator):
"""Image folder for publish."""
Expand Down Expand Up @@ -75,14 +80,24 @@ def process(self):
groups.append(group)

creator_subset_name = self.data["subset"]
layer_name = ''
for group in groups:
long_names = []
group.name = group.name.replace(stub.PUBLISH_ICON, ''). \
replace(stub.LOADED_ICON, '')

subset_name = creator_subset_name
if len(groups) > 1:
subset_name += group.name.title().replace(" ", "")
layer_name = re.sub(
"[^{}]+".format(SUBSET_NAME_ALLOWED_SYMBOLS),
"",
group.name
)
if "{layer}" not in subset_name.lower():
subset_name += "{Layer}"

layer_fill = prepare_template_data({"layer": layer_name})
subset_name = subset_name.format(**layer_fill)

if group.long_name:
for directory in group.long_name[::-1]:
Expand All @@ -98,3 +113,7 @@ def process(self):
# reusing existing group, need to rename afterwards
if not create_group:
stub.rename_layer(group.id, stub.PUBLISH_ICON + group.name)

@classmethod
def get_dynamic_data(cls, *args, **kwargs):
return {"layer": "{layer}"}
8 changes: 8 additions & 0 deletions openpype/hosts/photoshop/plugins/publish/validate_naming.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import openpype.api
from openpype.pipeline import PublishXmlValidationError
from openpype.hosts.photoshop import api as photoshop
from openpype.pipeline.create import SUBSET_NAME_ALLOWED_SYMBOLS


class ValidateNamingRepair(pyblish.api.Action):
Expand Down Expand Up @@ -50,6 +51,13 @@ def process(self, context, plugin):
subset_name = re.sub(invalid_chars, replace_char,
instance.data["subset"])

# format from Tool Creator
subset_name = re.sub(
"[^{}]+".format(SUBSET_NAME_ALLOWED_SYMBOLS),
"",
subset_name
)

layer_meta["subset"] = subset_name
stub.imprint(instance_id, layer_meta)

Expand Down