mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
140 lines
3.9 KiB
Python
140 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Loader for image sequences."""
|
|
import os
|
|
import uuid
|
|
from pathlib import Path
|
|
|
|
import clique
|
|
from avalon import api, harmony
|
|
|
|
import pype.lib
|
|
|
|
|
|
class ImageSequenceLoader(api.Loader):
|
|
"""Load image sequences.
|
|
|
|
Stores the imported asset in a container named after the asset.
|
|
"""
|
|
|
|
families = ["shot", "render", "image", "plate", "reference"]
|
|
representations = ["jpeg", "png", "jpg"]
|
|
|
|
def load(self, context, name=None, namespace=None, data=None):
|
|
"""Plugin entry point.
|
|
|
|
Args:
|
|
context (:class:`pyblish.api.Context`): Context.
|
|
name (str, optional): Container name.
|
|
namespace (str, optional): Container namespace.
|
|
data (dict, optional): Additional data passed into loader.
|
|
|
|
"""
|
|
fname = Path(self.fname)
|
|
self_name = self.__class__.__name__
|
|
collections, remainder = clique.assemble(
|
|
os.listdir(fname.parent.as_posix())
|
|
)
|
|
files = []
|
|
if collections:
|
|
for f in list(collections[0]):
|
|
files.append(fname.parent.joinpath(f).as_posix())
|
|
else:
|
|
files.append(fname.parent.joinpath(remainder[0]).as_posix())
|
|
|
|
asset = context["asset"]["name"]
|
|
subset = context["subset"]["name"]
|
|
|
|
group_id = str(uuid.uuid4())
|
|
read_node = harmony.send(
|
|
{
|
|
"function": f"PypeHarmony.Loaders.{self_name}.importFiles", # noqa: E501
|
|
"args": [
|
|
files,
|
|
asset,
|
|
subset,
|
|
1,
|
|
group_id
|
|
]
|
|
}
|
|
)["result"]
|
|
|
|
return harmony.containerise(
|
|
f"{asset}_{subset}",
|
|
namespace,
|
|
read_node,
|
|
context,
|
|
self_name,
|
|
nodes=[read_node]
|
|
)
|
|
|
|
def update(self, container, representation):
|
|
"""Update loaded containers.
|
|
|
|
Args:
|
|
container (dict): Container data.
|
|
representation (dict): Representation data.
|
|
|
|
"""
|
|
self_name = self.__class__.__name__
|
|
node = harmony.find_node_by_name(container["name"], "READ")
|
|
|
|
path = api.get_representation_path(representation)
|
|
collections, remainder = clique.assemble(
|
|
os.listdir(os.path.dirname(path))
|
|
)
|
|
files = []
|
|
if collections:
|
|
for f in list(collections[0]):
|
|
files.append(
|
|
os.path.join(
|
|
os.path.dirname(path), f
|
|
).replace("\\", "/")
|
|
)
|
|
else:
|
|
files.append(
|
|
os.path.join(
|
|
os.path.dirname(path), remainder[0]
|
|
).replace("\\", "/")
|
|
)
|
|
|
|
harmony.send(
|
|
{
|
|
"function": f"PypeHarmony.Loaders.{self_name}.replaceFiles",
|
|
"args": [files, node, 1]
|
|
}
|
|
)
|
|
|
|
# Colour node.
|
|
if pype.lib.is_latest(representation):
|
|
harmony.send(
|
|
{
|
|
"function": "PypeHarmony.setColor",
|
|
"args": [node, [0, 255, 0, 255]]
|
|
})
|
|
else:
|
|
harmony.send(
|
|
{
|
|
"function": "PypeHarmony.setColor",
|
|
"args": [node, [255, 0, 0, 255]]
|
|
})
|
|
|
|
harmony.imprint(
|
|
node, {"representation": str(representation["_id"])}
|
|
)
|
|
|
|
def remove(self, container):
|
|
"""Remove loaded container.
|
|
|
|
Args:
|
|
container (dict): Container data.
|
|
|
|
"""
|
|
node = harmony.find_node_by_name(container["name"], "READ")
|
|
harmony.send(
|
|
{"function": "PypeHarmony.deleteNode", "args": [node]}
|
|
)
|
|
harmony.imprint(node, {}, remove=True)
|
|
|
|
def switch(self, container, representation):
|
|
"""Switch loaded representations."""
|
|
self.update(container, representation)
|