mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
143 lines
4 KiB
Python
143 lines
4 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Load template."""
|
|
import tempfile
|
|
import zipfile
|
|
import os
|
|
import shutil
|
|
import uuid
|
|
|
|
from avalon import api, harmony
|
|
import pype.lib
|
|
|
|
|
|
class TemplateLoader(api.Loader):
|
|
"""Load Harmony template as container.
|
|
|
|
.. todo::
|
|
|
|
This must be implemented properly.
|
|
|
|
"""
|
|
|
|
families = ["template", "workfile"]
|
|
representations = ["*"]
|
|
label = "Load Template"
|
|
icon = "gift"
|
|
|
|
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.
|
|
|
|
"""
|
|
# Load template.
|
|
self_name = self.__class__.__name__
|
|
temp_dir = tempfile.mkdtemp()
|
|
zip_file = api.get_representation_path(context["representation"])
|
|
template_path = os.path.join(temp_dir, "temp.tpl")
|
|
with zipfile.ZipFile(zip_file, "r") as zip_ref:
|
|
zip_ref.extractall(template_path)
|
|
|
|
group_id = "{}".format(uuid.uuid4())
|
|
|
|
container_group = harmony.send(
|
|
{
|
|
"function": f"PypeHarmony.Loaders.{self_name}.loadContainer",
|
|
"args": [template_path,
|
|
context["asset"]["name"],
|
|
context["subset"]["name"],
|
|
group_id]
|
|
}
|
|
)["result"]
|
|
|
|
# Cleanup the temp directory
|
|
shutil.rmtree(temp_dir)
|
|
|
|
# We must validate the group_node
|
|
return harmony.containerise(
|
|
name,
|
|
namespace,
|
|
container_group,
|
|
context,
|
|
self_name
|
|
)
|
|
|
|
def update(self, container, representation):
|
|
"""Update loaded containers.
|
|
|
|
Args:
|
|
container (dict): Container data.
|
|
representation (dict): Representation data.
|
|
|
|
"""
|
|
node_name = container["name"]
|
|
node = harmony.find_node_by_name(node_name, "GROUP")
|
|
self_name = self.__class__.__name__
|
|
|
|
update_and_replace = False
|
|
if pype.lib.is_latest(representation):
|
|
self._set_green(node)
|
|
else:
|
|
self._set_red(node)
|
|
|
|
update_and_replace = harmony.send(
|
|
{
|
|
"function": f"PypeHarmony.Loaders.{self_name}."
|
|
"askForColumnsUpdate",
|
|
"args": []
|
|
}
|
|
)["result"]
|
|
|
|
if update_and_replace:
|
|
# FIXME: This won't work, need to implement it.
|
|
harmony.send(
|
|
{
|
|
"function": f"PypeHarmony.Loaders.{self_name}."
|
|
"replaceNode",
|
|
"args": []
|
|
}
|
|
)
|
|
else:
|
|
self.load(
|
|
container["context"], container["name"],
|
|
None, container["data"])
|
|
|
|
harmony.imprint(
|
|
node, {"representation": str(representation["_id"])}
|
|
)
|
|
|
|
def remove(self, container):
|
|
"""Remove container.
|
|
|
|
Args:
|
|
container (dict): container definition.
|
|
|
|
"""
|
|
node = harmony.find_node_by_name(container["name"], "GROUP")
|
|
harmony.send(
|
|
{"function": "PypeHarmony.deleteNode", "args": [node]}
|
|
)
|
|
|
|
def switch(self, container, representation):
|
|
"""Switch representation containers."""
|
|
self.update(container, representation)
|
|
|
|
def _set_green(self, node):
|
|
"""Set node color to green `rgba(0, 255, 0, 255)`."""
|
|
harmony.send(
|
|
{
|
|
"function": "PypeHarmony.setColor",
|
|
"args": [node, [0, 255, 0, 255]]
|
|
})
|
|
|
|
def _set_red(self, node):
|
|
"""Set node color to red `rgba(255, 0, 0, 255)`."""
|
|
harmony.send(
|
|
{
|
|
"function": "PypeHarmony.setColor",
|
|
"args": [node, [255, 0, 0, 255]]
|
|
})
|