Skip to content

collect_addons

Collect AYON addons.

AddonInfo dataclass

Source code in client/ayon_core/plugins/publish/collect_addons.py
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@dataclass
class AddonInfo:
    name: str
    version: str | None
    server_version: str | None
    label: str | None = None

    def get_row(
        self, name_width: int, version_width: int, server_version_width: int
    ) -> str:
        """Return formatted row for the addon info."""
        version = self.version or "-"
        server_version = self.server_version or "-"
        label = self.label or self.name

        return (
            f"{label:<{name_width}}"
            f" | {version:<{version_width}}"
            f" | {server_version:<{server_version_width}}"
        )

get_row(name_width, version_width, server_version_width)

Return formatted row for the addon info.

Source code in client/ayon_core/plugins/publish/collect_addons.py
26
27
28
29
30
31
32
33
34
35
36
37
38
def get_row(
    self, name_width: int, version_width: int, server_version_width: int
) -> str:
    """Return formatted row for the addon info."""
    version = self.version or "-"
    server_version = self.server_version or "-"
    label = self.label or self.name

    return (
        f"{label:<{name_width}}"
        f" | {version:<{version_width}}"
        f" | {server_version:<{server_version_width}}"
    )

CollectAddons

Bases: ContextPlugin

Collect AYON addons.

Source code in client/ayon_core/plugins/publish/collect_addons.py
 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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
class CollectAddons(pyblish.api.ContextPlugin):
    """Collect AYON addons."""

    order = pyblish.api.CollectorOrder - 0.5
    label = "AYON Addons"

    def process(self, context):
        manager = AddonsManager()
        context.data["ayonAddonsManager"] = manager
        context.data["ayonAddons"] = manager.addons_by_name

        bundle_info = get_bundle_information()
        server_version_by_name = {
            addon.name: addon.version
            for addon in bundle_info.addons
        }
        server_only_addons = set(server_version_by_name)

        _addons = [
            (addon.name, addon.version or "N/A")
            for addon in manager.addons
        ]
        _addons.append(("core", __version__))

        items: list[AddonInfo] = []
        title_name = "Name"
        title_version = "Version"
        title_server_version = "Server Version"
        name_width = len(title_name)
        version_width = len(title_version)
        server_version_width = len(title_server_version)
        for addon_name, addon_version in _addons:
            server_version = server_version_by_name.get(addon_name)
            server_only_addons.discard(addon_name)
            label = addon_name
            if addon_version != server_version:
                label = f"* {addon_name}"
            name_width = max(name_width, len(label))
            version_width = max(version_width, len(addon_version))
            if server_version is not None:
                server_version_width = max(
                    server_version_width, len(server_version)
                )

            items.append(AddonInfo(
                addon_name,
                addon_version,
                server_version,
                label,
            ))

        for addon_name in server_only_addons:
            server_version = server_version_by_name[addon_name]
            name_width = max(name_width, len(addon_name))
            server_version_width = max(
                server_version_width, len(server_version)
            )
            items.append(AddonInfo(
                addon_name,
                None,
                server_version,
            ))

        items.sort(key=lambda x: x.name)

        title = (
            f"{title_name:<{name_width}}"
            f" | {title_version:<{version_width}}"
            f" | {title_server_version:<{server_version_width}}"
        )
        bundle_name = os.getenv("AYON_BUNDLE_NAME")
        if is_dev_mode_enabled():
            settings_variant = "dev"
        else:
            settings_variant = get_settings_variant()

        server_version = ayon_api.get_server_version()

        ayon_info = get_ayon_info()
        launcher_version = ayon_info["ayon_launcher_version"]
        launcher_type = ayon_info["version_type"]
        sep_line = "+".join([
            (name_width + 1) * "-",
            (version_width + 2) * "-",
            (server_version_width + 2) * "-"
        ])
        lines = [
            "Basic AYON information:",
            f"AYON server: {server_version}",
            f"Bundle: {bundle_name} ({settings_variant})",
            f"AYON launcher: {launcher_version} ({launcher_type})",
            "Addons:",
            sep_line,
            title,
            sep_line,
        ]
        lines.extend(
            item.get_row(name_width, version_width, server_version_width)
            for item in items
        )
        lines.append(sep_line)

        self.log.debug("\n".join(lines))