Skip to content

validate_exposed_knobs

ValidateExposedKnobs

Bases: OptionalPyblishPluginMixin, InstancePlugin

Validate write node exposed knobs.

Compare exposed linked knobs to settings.

Source code in client/ayon_nuke/plugins/publish/validate_exposed_knobs.py
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
class ValidateExposedKnobs(
    OptionalPyblishPluginMixin,
    pyblish.api.InstancePlugin
):
    """ Validate write node exposed knobs.

    Compare exposed linked knobs to settings.
    """

    order = pyblish.api.ValidatorOrder
    optional = True
    families = ["render", "prerender", "image"]
    label = "Validate Exposed Knobs"
    actions = [RepairExposedKnobs]
    hosts = ["nuke"]

    settings_category = "nuke"

    product_types_mapping = {
        "render": "CreateWriteRender",
        "prerender": "CreateWritePrerender",
        "image": "CreateWriteImage"
    }

    def process(self, instance):
        if not self.is_active(instance.data):
            return

        product_type = instance.data["productType"]
        plugin = self.product_types_mapping[product_type]
        group_node = instance.data["transientData"]["node"]
        nuke_settings = instance.context.data["project_settings"]["nuke"]
        create_settings = nuke_settings["create"][plugin]
        exposed_knobs = create_settings.get("exposed_knobs", [])
        unexposed_knobs = []
        for knob in exposed_knobs:
            if knob not in group_node.knobs():
                unexposed_knobs.append(knob)

        if unexposed_knobs:
            raise PublishValidationError(
                "Missing exposed knobs: {}".format(unexposed_knobs)
            )