Skip to content

load_palette

ImportPaletteLoader

Bases: LinkPaletteLoader

Import a palette.

Copy the palette to the scene directory and link it.

Source code in client/ayon_harmony/plugins/load/load_palette.py
 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
124
125
126
127
128
129
130
131
class ImportPaletteLoader(LinkPaletteLoader):
    """Import a palette.

    Copy the palette to the scene directory and link it.
    """

    label = "Import Palette"
    representations = {"plt"}
    icon = "gift"
    order = 0.1

    def load_palette(self, palette_path: str) -> str:
        """Import the palette to the scene.

        Copy the palette to the scene directory and link it.

        Args:
            palette_path (str): Path to the palette.

        Returns:
            str: Palette ID.
        """
        scene_path = harmony.send(
            {"function": "scene.currentProjectPath"}
        )["result"]

        dst = Path(
            scene_path,
            "palette-library",
            Path(palette_path).name,
        )

        self.log.info(f"Copying palette to {dst}")
        shutil.copy(palette_path, dst)

        return super().load_palette(dst.as_posix())

load_palette(palette_path)

Import the palette to the scene.

Copy the palette to the scene directory and link it.

Parameters:

Name Type Description Default
palette_path str

Path to the palette.

required

Returns:

Name Type Description
str str

Palette ID.

Source code in client/ayon_harmony/plugins/load/load_palette.py
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
def load_palette(self, palette_path: str) -> str:
    """Import the palette to the scene.

    Copy the palette to the scene directory and link it.

    Args:
        palette_path (str): Path to the palette.

    Returns:
        str: Palette ID.
    """
    scene_path = harmony.send(
        {"function": "scene.currentProjectPath"}
    )["result"]

    dst = Path(
        scene_path,
        "palette-library",
        Path(palette_path).name,
    )

    self.log.info(f"Copying palette to {dst}")
    shutil.copy(palette_path, dst)

    return super().load_palette(dst.as_posix())

LinkPaletteLoader

Bases: LoaderPlugin

Link a palette.

Link the palette to the scene.

Source code in client/ayon_harmony/plugins/load/load_palette.py
 9
10
11
12
13
14
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
class LinkPaletteLoader(load.LoaderPlugin):
    """Link a palette.

    Link the palette to the scene.
    """

    label = "Link Palette"
    product_types = {"palette", "harmony.palette"}
    representations = {"plt"}
    icon = "link"

    def load(self, context, name=None, namespace=None, data=None):
        representation = context["representation"]
        repre_filepath = self.filepath_from_context(context)
        palette_path = self.load_palette(repre_filepath)

        product_name = representation["context"]["product"]["name"]
        name = product_name.replace("palette", "")

        return harmony.containerise(
            name,
            namespace,
            # Because of sh*tty Harmony API, the only consistent value is
            #   the palette path palette["id"] changes at every file opening
            #   and the index can be modified by user
            palette_path,
            context,
            self.__class__.__name__,
            nodes=[palette_path],
        )

    def load_palette(self, palette_path: str) -> str:
        """Link the palette to the scene.

        Args:
            palette_path (str): Path to the palette.

        Returns:
            str: Palette path.

        """
        harmony.send(
            {
                "function": (
                    "PaletteObjectManager.getScenePaletteList().addPalette"
                ),
                "args": Path(palette_path).with_suffix("").as_posix(),
            }
        )["result"]
        return palette_path

    def remove(self, container) -> int:
        """Remove the palette from the scene.

        Args:
            container (dict): Container data.

        Returns:
            int: Removed palette index.
        """
        palette_path = container["nodes"][0]
        removed_idx = harmony.send(
            {
                "function": "AyonHarmony.removePaletteByPath",
                "args": palette_path,
            }
        )["result"]
        harmony.remove(palette_path)

        return removed_idx

    def switch(self, container, context):
        palette_idx = self.remove(container)
        palette_path = self.load(context)

        # Move loaded palette to the index of the removed one
        harmony.send(
            {
                "function": "AyonHarmony.movePaletteToIndex",
                "args": [palette_path, palette_idx]
            }
        )

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

load_palette(palette_path)

Link the palette to the scene.

Parameters:

Name Type Description Default
palette_path str

Path to the palette.

required

Returns:

Name Type Description
str str

Palette path.

Source code in client/ayon_harmony/plugins/load/load_palette.py
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
def load_palette(self, palette_path: str) -> str:
    """Link the palette to the scene.

    Args:
        palette_path (str): Path to the palette.

    Returns:
        str: Palette path.

    """
    harmony.send(
        {
            "function": (
                "PaletteObjectManager.getScenePaletteList().addPalette"
            ),
            "args": Path(palette_path).with_suffix("").as_posix(),
        }
    )["result"]
    return palette_path

remove(container)

Remove the palette from the scene.

Parameters:

Name Type Description Default
container dict

Container data.

required

Returns:

Name Type Description
int int

Removed palette index.

Source code in client/ayon_harmony/plugins/load/load_palette.py
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
def remove(self, container) -> int:
    """Remove the palette from the scene.

    Args:
        container (dict): Container data.

    Returns:
        int: Removed palette index.
    """
    palette_path = container["nodes"][0]
    removed_idx = harmony.send(
        {
            "function": "AyonHarmony.removePaletteByPath",
            "args": palette_path,
        }
    )["result"]
    harmony.remove(palette_path)

    return removed_idx