Skip to content

validate_material_library_is_saved

ValidateMaterialLibraryIsSaved

Bases: InstancePlugin

Validates Material Library is saved.

This validator checks if the material library has modified content (Saving, deleting, or renaming Materials, Maps, etc.) without saving the material library file.

Source code in client/ayon_max/plugins/publish/validate_material_library_is_saved.py
 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
44
45
46
class ValidateMaterialLibraryIsSaved(pyblish.api.InstancePlugin):
    """Validates Material Library is saved.

    This validator checks if the material library has modified content
    (Saving, deleting, or renaming Materials, Maps, etc.)
    without saving the material library file.

    """

    order = pyblish.api.ValidatorOrder
    families = ["matlib"]
    hosts = ["max"]
    label = "Material Library Is Saved"
    actions = [RepairAction]

    def process(self, instance):
        invalid = self.get_invalid(instance)
        if invalid:
            raise PublishValidationError(
                "Material Library must be saved before publishing. "
                f"Invalid types on: {invalid}"
            )

    @classmethod
    def get_invalid(cls, instance):
        """
        Get invalid nodes if the instance is not material library file saved.
        """
        invalid = []
        matlib_filepath = instance.data["matlib_filepath"]
        if rt.sme.IsMtlLibModified(matlib_filepath):
            invalid.append(matlib_filepath)
        return invalid

    @classmethod
    def repair(cls, instance):
        """Repair action to save the material library."""
        for invalid_path in cls.get_invalid(instance):
            rt.sme.SaveMtlLib(invalid_path)

get_invalid(instance) classmethod

Get invalid nodes if the instance is not material library file saved.

Source code in client/ayon_max/plugins/publish/validate_material_library_is_saved.py
31
32
33
34
35
36
37
38
39
40
@classmethod
def get_invalid(cls, instance):
    """
    Get invalid nodes if the instance is not material library file saved.
    """
    invalid = []
    matlib_filepath = instance.data["matlib_filepath"]
    if rt.sme.IsMtlLibModified(matlib_filepath):
        invalid.append(matlib_filepath)
    return invalid

repair(instance) classmethod

Repair action to save the material library.

Source code in client/ayon_max/plugins/publish/validate_material_library_is_saved.py
42
43
44
45
46
@classmethod
def repair(cls, instance):
    """Repair action to save the material library."""
    for invalid_path in cls.get_invalid(instance):
        rt.sme.SaveMtlLib(invalid_path)