Skip to content

validate_resolution_setting

ValidateResolutionSetting

Bases: InstancePlugin, OptionalPyblishPluginMixin

Validate the resolution setting aligned with DB

Source code in client/ayon_max/plugins/publish/validate_resolution_setting.py
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
class ValidateResolutionSetting(pyblish.api.InstancePlugin,
                                OptionalPyblishPluginMixin):
    """Validate the resolution setting aligned with DB"""

    order = pyblish.api.ValidatorOrder - 0.01
    families = ["maxrender"]
    hosts = ["max"]
    label = "Validate Resolution Setting"
    optional = True
    actions = [RepairAction]

    def process(self, instance):
        if not self.is_active(instance.data):
            return
        width, height = self.get_folder_resolution(instance)
        current_width, current_height = (
            self.get_current_resolution(instance)
        )

        if current_width != width and current_height != height:
            raise PublishValidationError("Resolution Setting "
                                         "not matching resolution "
                                         "set on asset or shot.")
        if current_width != width:
            raise PublishValidationError("Width in Resolution Setting "
                                         "not matching resolution set "
                                         "on asset or shot.")

        if current_height != height:
            raise PublishValidationError("Height in Resolution Setting "
                                         "not matching resolution set "
                                         "on asset or shot.")

    def get_current_resolution(self, instance):
        return rt.renderWidth, rt.renderHeight

    @classmethod
    def get_folder_resolution(cls, instance):
        task_entity = instance.data.get("taskEntity")
        if task_entity:
            task_attributes = task_entity["attrib"]
            width = task_attributes["resolutionWidth"]
            height = task_attributes["resolutionHeight"]
            return int(width), int(height)

        # Defaults if not found in folder entity
        return 1920, 1080

    @classmethod
    def repair(cls, instance):
        reset_scene_resolution()