Skip to content

load_file

FileLoader

Bases: AfterEffectsLoader

Load images

Stores the imported product version in a container named after the folder.

Source code in client/ayon_aftereffects/plugins/load/load_file.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
 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
class FileLoader(api.AfterEffectsLoader):
    """Load images

    Stores the imported product version in a container named after the folder.
    """
    label = "Load file"

    product_types = {
        "image",
        "plate",
        "render",
        "prerender",
        "review",
        "audio",
    }
    representations = {"*"}

    def load(self, context, name=None, namespace=None, data=None):
        stub = self.get_stub()
        selected_folders = stub.get_selected_items(
            comps=False, folders=True, footages=False)
        if selected_folders:
            stub.select_items([folder.id for folder in selected_folders])
        layers = stub.get_items(comps=True, folders=True, footages=True)
        existing_layers = [layer.name for layer in layers]
        comp_name = get_unique_layer_name(
            existing_layers, "{}_{}".format(
                context["folder"]["name"], name
            )
        )

        import_options = {}

        path = self.filepath_from_context(context)

        if len(context["representation"]["files"]) > 1:
            import_options['sequence'] = True

        if not path:
            repr_id = context["representation"]["id"]
            self.log.warning(
                "Representation id `{}` is failing to load".format(repr_id))
            return

        path = path.replace("\\", "/")
        if '.psd' in path:
            import_options['ImportAsType'] = 'ImportAsType.COMP'

        comp = stub.import_file(path, stub.LOADED_ICON + comp_name,
                                import_options)
        if not comp:
            self.log.warning(
                "Representation `{}` is failing to load".format(path))
            self.log.warning("Check host app for alert error.")
            return

        self[:] = [comp]
        namespace = namespace or comp_name
        return api.containerise(
            name,
            namespace,
            comp,
            context,
            self.__class__.__name__
        )

    def update(self, container, context):
        stub = self.get_stub()
        layer = container.pop("layer")

        folder_name = context["folder"]["name"]
        product_name = context["product"]["name"]
        repre_entity = context["representation"]

        namespace_from_container = re.sub(r'_\d{3}$', '',
                                          container["namespace"])
        layer_name = "{}_{}".format(folder_name, product_name)
        #
        if namespace_from_container != layer_name:
            layers = stub.get_items(comps=True)
            existing_layers = [layer.name for layer in layers]
            layer_name = get_unique_layer_name(
                existing_layers,
                "{}_{}".format(folder_name, product_name))
        else:  # switching version - keep same name
            layer_name = container["namespace"]
        path = get_representation_path(repre_entity)

        if len(repre_entity["files"]) > 1:
           path = os.path.dirname(path)
        # with aftereffects.maintained_selection():  # TODO
        stub.replace_item(layer.id, path, stub.LOADED_ICON + layer_name)
        stub.imprint(
            layer.id, {"representation": repre_entity["id"],
                       "name": product_name,
                       "namespace": layer_name}
        )

    def remove(self, container):
        """
            Removes element from scene: deletes layer + removes from Headline
        Args:
            container (dict): container to be removed - used to get layer_id
        """
        stub = self.get_stub()
        layer = container.pop("layer")
        stub.imprint(layer.id, {})
        stub.delete_item(layer.id)

    def switch(self, container, context):
        self.update(container, context)

remove(container)

Removes element from scene: deletes layer + removes from Headline

Args: container (dict): container to be removed - used to get layer_id

Source code in client/ayon_aftereffects/plugins/load/load_file.py
106
107
108
109
110
111
112
113
114
115
def remove(self, container):
    """
        Removes element from scene: deletes layer + removes from Headline
    Args:
        container (dict): container to be removed - used to get layer_id
    """
    stub = self.get_stub()
    layer = container.pop("layer")
    stub.imprint(layer.id, {})
    stub.delete_item(layer.id)