Skip to content

validate_camera_contents

ValidateCameraContent

Bases: InstancePlugin

Validates Camera instance contents.

A Camera instance may only hold a SINGLE camera's transform

Source code in client/ayon_max/plugins/publish/validate_camera_contents.py
 7
 8
 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
class ValidateCameraContent(pyblish.api.InstancePlugin):
    """Validates Camera instance contents.

    A Camera instance may only hold a SINGLE camera's transform
    """

    order = pyblish.api.ValidatorOrder
    families = ["camera", "review"]
    hosts = ["max"]
    label = "Camera Contents"
    camera_type = ["$Free_Camera", "$Target_Camera",
                   "$Physical_Camera", "$Target"]

    def process(self, instance):
        invalid = self.get_invalid(instance)
        if invalid:
            raise PublishValidationError(("Camera instance must only include"
                                          "camera (and camera target). "
                                          f"Invalid content {invalid}"))

    def get_invalid(self, instance):
        """
        Get invalid nodes if the instance is not camera
        """
        invalid = []
        container = instance.data["instance_node"]
        self.log.info(f"Validating camera content for {container}")

        selection_list = instance.data["members"]
        for sel in selection_list:
            # to avoid Attribute Error from pymxs wrapper
            sel_tmp = str(sel)
            found = any(sel_tmp.startswith(cam) for cam in self.camera_type)
            if not found:
                self.log.error("Camera not found")
                invalid.append(sel)
        return invalid

get_invalid(instance)

Get invalid nodes if the instance is not camera

Source code in client/ayon_max/plugins/publish/validate_camera_contents.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def get_invalid(self, instance):
    """
    Get invalid nodes if the instance is not camera
    """
    invalid = []
    container = instance.data["instance_node"]
    self.log.info(f"Validating camera content for {container}")

    selection_list = instance.data["members"]
    for sel in selection_list:
        # to avoid Attribute Error from pymxs wrapper
        sel_tmp = str(sel)
        found = any(sel_tmp.startswith(cam) for cam in self.camera_type)
        if not found:
            self.log.error("Camera not found")
            invalid.append(sel)
    return invalid