Skip to content

load_template

Load template.

TemplateLoader

Bases: LoaderPlugin

Load Harmony template as Backdrop container.

Source code in client/ayon_harmony/plugins/load/load_template.py
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
class TemplateLoader(load.LoaderPlugin):
    """Load Harmony template as Backdrop container."""

    product_types = {"harmony.template"}
    representations = {"tpl"}
    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 = get_representation_path(context["representation"])
        template_path = os.path.join(temp_dir)
        with zipfile.ZipFile(zip_file, "r") as zip_ref:
            zip_ref.extractall(template_path)

        backdrop_name = harmony.send(
            {
                "function": f"AyonHarmony.Loaders.{self_name}.loadContainer",
                "args": os.path.join(template_path, "harmony.tpl")
            }
        )["result"]

        # Cleanup the temp directory
        shutil.rmtree(temp_dir)

        # We must validate the group_node
        return harmony.containerise(
            name,
            namespace,
            backdrop_name,
            context,
            self_name
        )

    def remove(self, container):
        """Remove container.

        Args:
            container (dict): container definition.
        """
        container_backdrop = harmony.find_backdrop_by_name(container["name"])
        harmony.send(
            {"function": "AyonHarmony.removeBackdropWithContents", "args": container_backdrop}
        )
        harmony.remove(container["name"])

    def update(self, container, context):
        """Update loaded containers.

        Args:
            container (dict): Container data.
            context (dict): Representation context data.

        """
        return self.switch(container, context)

    def switch(self, container, context):
        """Switch representation containers."""
        backdrop_name = container["name"]
        backdrop = harmony.find_backdrop_by_name(backdrop_name)

        # Keep backdrop links
        backdrop_links = harmony.send(
            {
                "function": "AyonHarmony.getBackdropLinks",
                "args": backdrop,
            }
        )["result"]

        # Replace template container
        self.remove(container)  # Before load to avoid node name incrementation
        container = self.load(context, container["name"], container["namespace"])

        # Restore backdrop links
        harmony.send(
            {
                "function": "AyonHarmony.setNodesLinks",
                "args": backdrop_links
            }
        )

        return container

    def _set_green(self, node): # TODO refactor for backdrop
        """Set node color to green `rgba(0, 255, 0, 255)`."""
        harmony.send(
            {
                "function": "AyonHarmony.setColor",
                "args": [node, [0, 255, 0, 255]]
            })

    def _set_red(self, node): # TODO refactor for backdrop
        """Set node color to red `rgba(255, 0, 0, 255)`."""
        harmony.send(
            {
                "function": "AyonHarmony.setColor",
                "args": [node, [255, 0, 0, 255]]
            })

load(context, name=None, namespace=None, data=None)

Plugin entry point.

Parameters:

Name Type Description Default
context

class:pyblish.api.Context): Context.

required
name str

Container name.

None
namespace str

Container namespace.

None
data dict

Additional data passed into loader.

None
Source code in client/ayon_harmony/plugins/load/load_template.py
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 = get_representation_path(context["representation"])
    template_path = os.path.join(temp_dir)
    with zipfile.ZipFile(zip_file, "r") as zip_ref:
        zip_ref.extractall(template_path)

    backdrop_name = harmony.send(
        {
            "function": f"AyonHarmony.Loaders.{self_name}.loadContainer",
            "args": os.path.join(template_path, "harmony.tpl")
        }
    )["result"]

    # Cleanup the temp directory
    shutil.rmtree(temp_dir)

    # We must validate the group_node
    return harmony.containerise(
        name,
        namespace,
        backdrop_name,
        context,
        self_name
    )

remove(container)

Remove container.

Parameters:

Name Type Description Default
container dict

container definition.

required
Source code in client/ayon_harmony/plugins/load/load_template.py
60
61
62
63
64
65
66
67
68
69
70
def remove(self, container):
    """Remove container.

    Args:
        container (dict): container definition.
    """
    container_backdrop = harmony.find_backdrop_by_name(container["name"])
    harmony.send(
        {"function": "AyonHarmony.removeBackdropWithContents", "args": container_backdrop}
    )
    harmony.remove(container["name"])

switch(container, context)

Switch representation containers.

Source code in client/ayon_harmony/plugins/load/load_template.py
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
def switch(self, container, context):
    """Switch representation containers."""
    backdrop_name = container["name"]
    backdrop = harmony.find_backdrop_by_name(backdrop_name)

    # Keep backdrop links
    backdrop_links = harmony.send(
        {
            "function": "AyonHarmony.getBackdropLinks",
            "args": backdrop,
        }
    )["result"]

    # Replace template container
    self.remove(container)  # Before load to avoid node name incrementation
    container = self.load(context, container["name"], container["namespace"])

    # Restore backdrop links
    harmony.send(
        {
            "function": "AyonHarmony.setNodesLinks",
            "args": backdrop_links
        }
    )

    return container

update(container, context)

Update loaded containers.

Parameters:

Name Type Description Default
container dict

Container data.

required
context dict

Representation context data.

required
Source code in client/ayon_harmony/plugins/load/load_template.py
72
73
74
75
76
77
78
79
80
def update(self, container, context):
    """Update loaded containers.

    Args:
        container (dict): Container data.
        context (dict): Representation context data.

    """
    return self.switch(container, context)