moved getting of stub to default photoshop loader class instead of loading it in global scope

This commit is contained in:
iLLiCiTiT 2022-01-10 23:19:53 +01:00
parent d7bc9c4124
commit ab1b2bdd7d
6 changed files with 60 additions and 47 deletions

View file

@ -4,6 +4,8 @@ Anything that isn't defined here is INTERNAL and unreliable for external use.
"""
from .launch_logic import stub
from .pipeline import (
ls,
list_instances,
@ -13,6 +15,7 @@ from .pipeline import (
containerise
)
from .plugin import (
PhotoshopLoader,
get_unique_layer_name
)
from .workio import (
@ -29,9 +32,10 @@ from .lib import (
maintained_visibility
)
from .launch_logic import stub
__all__ = [
# launch_logic
"stub"
# pipeline
"ls",
"list_instances",
@ -41,6 +45,7 @@ __all__ = [
"containerise",
# Plugin
"PhotoshopLoader",
"get_unique_layer_name",
# workfiles
@ -54,7 +59,4 @@ __all__ = [
# lib
"maintained_selection",
"maintained_visibility",
# launch_logic
"stub"
]

View file

@ -1,6 +1,5 @@
import os
import sys
import re
import contextlib
import traceback

View file

@ -1,5 +1,8 @@
import re
import avalon.api
from .launch_logic import stub
def get_unique_layer_name(layers, asset_name, subset_name):
"""
@ -24,3 +27,9 @@ def get_unique_layer_name(layers, asset_name, subset_name):
occurrences = names.get(name, 0)
return "{}_{:0>3d}".format(name, occurrences + 1)
class PhotoshopLoader(avalon.api.Loader):
@staticmethod
def get_stub():
return stub()

View file

@ -5,9 +5,7 @@ from openpype.hosts.photoshop import api as photoshop
from openpype.hosts.photoshop.api import get_unique_layer_name
stub = photoshop.stub()
class ImageLoader(api.Loader):
class ImageLoader(photoshop.PhotoshopLoader):
"""Load images
Stores the imported asset in a container named after the asset.
@ -17,11 +15,14 @@ class ImageLoader(api.Loader):
representations = ["*"]
def load(self, context, name=None, namespace=None, data=None):
layer_name = get_unique_layer_name(stub.get_layers(),
context["asset"]["name"],
name)
stub = self.get_stub()
layer_name = get_unique_layer_name(
stub.get_layers(),
context["asset"]["name"],
name
)
with photoshop.maintained_selection():
layer = self.import_layer(self.fname, layer_name)
layer = self.import_layer(self.fname, layer_name, stub)
self[:] = [layer]
namespace = namespace or layer_name
@ -36,6 +37,8 @@ class ImageLoader(api.Loader):
def update(self, container, representation):
""" Switch asset or change version """
stub = self.get_stub()
layer = container.pop("layer")
context = representation.get("context", {})
@ -45,9 +48,9 @@ class ImageLoader(api.Loader):
layer_name = "{}_{}".format(context["asset"], context["subset"])
# switching assets
if namespace_from_container != layer_name:
layer_name = get_unique_layer_name(stub.get_layers(),
context["asset"],
context["subset"])
layer_name = get_unique_layer_name(
stub.get_layers(), context["asset"], context["subset"]
)
else: # switching version - keep same name
layer_name = container["namespace"]
@ -67,6 +70,8 @@ class ImageLoader(api.Loader):
Args:
container (dict): container to be removed - used to get layer_id
"""
stub = self.get_stub()
layer = container.pop("layer")
stub.imprint(layer, {})
stub.delete_layer(layer.id)
@ -74,5 +79,5 @@ class ImageLoader(api.Loader):
def switch(self, container, representation):
self.update(container, representation)
def import_layer(self, file_name, layer_name):
def import_layer(self, file_name, layer_name, stub):
return stub.import_smart_object(file_name, layer_name)

View file

@ -1,17 +1,13 @@
import os
from avalon import api
from avalon.pipeline import get_representation_path_from_context
from avalon.vendor import qargparse
from openpype.lib import Anatomy
from openpype.hosts.photoshop import api as photoshop
from openpype.hosts.photoshop.api import get_unique_layer_name
stub = photoshop.stub()
class ImageFromSequenceLoader(api.Loader):
class ImageFromSequenceLoader(photoshop.PhotoshopLoader):
""" Load specifing image from sequence
Used only as quick load of reference file from a sequence.
@ -35,15 +31,16 @@ class ImageFromSequenceLoader(api.Loader):
def load(self, context, name=None, namespace=None, data=None):
if data.get("frame"):
self.fname = os.path.join(os.path.dirname(self.fname),
data["frame"])
self.fname = os.path.join(
os.path.dirname(self.fname), data["frame"]
)
if not os.path.exists(self.fname):
return
stub = photoshop.stub()
layer_name = get_unique_layer_name(stub.get_layers(),
context["asset"]["name"],
name)
stub = self.get_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)
@ -95,4 +92,3 @@ class ImageFromSequenceLoader(api.Loader):
def remove(self, container):
"""No update possible, not containerized."""
pass

View file

@ -5,27 +5,26 @@ from avalon import api
from openpype.hosts.photoshop import api as photoshop
from openpype.hosts.photoshop.api import get_unique_layer_name
stub = photoshop.stub()
class ReferenceLoader(api.Loader):
class ReferenceLoader(photoshop.PhotoshopLoader):
"""Load reference images
Stores the imported asset in a container named after the asset.
Stores the imported asset in a container named after the asset.
Inheriting from 'load_image' didn't work because of
"Cannot write to closing transport", possible refactor.
Inheriting from 'load_image' didn't work because of
"Cannot write to closing transport", possible refactor.
"""
families = ["image", "render"]
representations = ["*"]
def load(self, context, name=None, namespace=None, data=None):
layer_name = get_unique_layer_name(stub.get_layers(),
context["asset"]["name"],
name)
stub = self.get_stub()
layer_name = get_unique_layer_name(
stub.get_layers(), context["asset"]["name"], name
)
with photoshop.maintained_selection():
layer = self.import_layer(self.fname, layer_name)
layer = self.import_layer(self.fname, layer_name, stub)
self[:] = [layer]
namespace = namespace or layer_name
@ -40,6 +39,7 @@ class ReferenceLoader(api.Loader):
def update(self, container, representation):
""" Switch asset or change version """
stub = self.get_stub()
layer = container.pop("layer")
context = representation.get("context", {})
@ -49,9 +49,9 @@ class ReferenceLoader(api.Loader):
layer_name = "{}_{}".format(context["asset"], context["subset"])
# switching assets
if namespace_from_container != layer_name:
layer_name = get_unique_layer_name(stub.get_layers(),
context["asset"],
context["subset"])
layer_name = get_unique_layer_name(
stub.get_layers(), context["asset"], context["subset"]
)
else: # switching version - keep same name
layer_name = container["namespace"]
@ -66,11 +66,12 @@ class ReferenceLoader(api.Loader):
)
def remove(self, container):
"""
Removes element from scene: deletes layer + removes from Headline
"""Removes element from scene: deletes layer + removes from Headline
Args:
container (dict): container to be removed - used to get layer_id
"""
stub = self.get_stub()
layer = container.pop("layer")
stub.imprint(layer, {})
stub.delete_layer(layer.id)
@ -78,6 +79,7 @@ class ReferenceLoader(api.Loader):
def switch(self, container, representation):
self.update(container, representation)
def import_layer(self, file_name, layer_name):
return stub.import_smart_object(file_name, layer_name,
as_reference=True)
def import_layer(self, file_name, layer_name, stub):
return stub.import_smart_object(
file_name, layer_name, as_reference=True
)