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

Commit

Permalink
#636 - un subclassed loader from sequence, created lib for reusable m…
Browse files Browse the repository at this point in the history
…ethods

Loader from sequence didnt was dropping connection to PS after first successful import
  • Loading branch information
kalisp committed Jun 17, 2021
1 parent 68e9102 commit 852a2f3
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 31 deletions.
26 changes: 26 additions & 0 deletions openpype/hosts/photoshop/plugins/lib.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import re


def get_unique_layer_name(layers, asset_name, subset_name):
"""
Gets all layer names and if 'asset_name_subset_name' is present, it
increases suffix by 1 (eg. creates unique layer name - for Loader)
Args:
layers (list) of dict with layers info (name, id etc.)
asset_name (string):
subset_name (string):
Returns:
(string): name_00X (without version)
"""
name = "{}_{}".format(asset_name, subset_name)
names = {}
for layer in layers:
layer_name = re.sub(r'_\d{3}$', '', layer.name)
if layer_name in names.keys():
names[layer_name] = names[layer_name] + 1
else:
names[layer_name] = 1
occurrences = names.get(name, 0)

return "{}_{:0>3d}".format(name, occurrences + 1)
33 changes: 7 additions & 26 deletions openpype/hosts/photoshop/plugins/load/load_image.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from avalon import api, photoshop
import os
import re

from avalon import api, photoshop

from openpype.hosts.photoshop.plugins.lib import get_unique_layer_name

stub = photoshop.stub()


Expand All @@ -15,8 +17,9 @@ class ImageLoader(api.Loader):
representations = ["*"]

def load(self, context, name=None, namespace=None, data=None):
layer_name = self._get_unique_layer_name(context["asset"]["name"],
name)
layer_name = get_unique_layer_name(stub.get_layers(),
context["asset"]["name"],
name)
with photoshop.maintained_selection():
layer = stub.import_smart_object(self.fname, layer_name)

Expand Down Expand Up @@ -69,25 +72,3 @@ def remove(self, container):

def switch(self, container, representation):
self.update(container, representation)

def _get_unique_layer_name(self, asset_name, subset_name):
"""
Gets all layer names and if 'name' is present in them, increases
suffix by 1 (eg. creates unique layer name - for Loader)
Args:
name (string): in format asset_subset
Returns:
(string): name_00X (without version)
"""
name = "{}_{}".format(asset_name, subset_name)
names = {}
for layer in stub.get_layers():
layer_name = re.sub(r'_\d{3}$', '', layer.name)
if layer_name in names.keys():
names[layer_name] = names[layer_name] + 1
else:
names[layer_name] = 1
occurrences = names.get(name, 0)

return "{}_{:0>3d}".format(name, occurrences + 1)
15 changes: 10 additions & 5 deletions openpype/hosts/photoshop/plugins/load/load_image_from_sequence.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import os

from avalon import api
from avalon import photoshop
from avalon.vendor import qargparse

from openpype.hosts.photoshop.plugins.load.load_image import ImageLoader
from openpype.hosts.photoshop.plugins.lib import get_unique_layer_name

stub = photoshop.stub()


class ImageFromSequenceLoader(ImageLoader):
class ImageFromSequenceLoader(api.Loader):
""" Load specifing image from sequence
Used only as quick load of reference file from a sequence.
Expand Down Expand Up @@ -36,8 +38,11 @@ def load(self, context, name=None, namespace=None, data=None):
if not os.path.exists(self.fname):
return

layer_name = self._get_unique_layer_name(context["asset"]["name"],
name)
stub = photoshop.stub()
layer_name = get_unique_layer_name(stub.get_layers(),
context["asset"]["name"],
name)

with photoshop.maintained_selection():
layer = stub.import_smart_object(self.fname, layer_name)

Expand All @@ -59,7 +64,7 @@ def get_options(cls, repre_contexts):
"""
files = []
for context in repre_contexts:
fname = ImageLoader.filepath_from_context(context)
fname = ImageFromSequenceLoader.filepath_from_context(context)
_, file_extension = os.path.splitext(fname)

for file_name in os.listdir(os.path.dirname(fname)):
Expand Down

0 comments on commit 852a2f3

Please sign in to comment.