Skip to content

create_workfile

Creator plugin for creating workfiles.

CreateWorkfile

Bases: AutoCreator

Workfile auto-creator.

Source code in client/ayon_hiero/plugins/create/create_workfile.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
119
class CreateWorkfile(AutoCreator):
    """Workfile auto-creator."""
    settings_category = "hiero"

    identifier = "io.ayon.creators.hiero.workfile"
    label = "Workfile"
    product_type = "workfile"
    icon = "fa5.file"

    default_variant = "Main"

    @classmethod
    def dump_instance_data(cls, data):
        """ Dump instance data into AyonData project tag.

        Args:
            data (dict): The data to push to the project tag.
        """
        project_tag = tags.get_or_create_workfile_tag(create=True)

        tag_data = {
            "metadata": data,
            "note": "AYON workfile data"
        }
        tags.update_tag(project_tag, tag_data)

    def load_instance_data(cls):
        """ Returns the data stored in AyonData project tag if any.

        Returns:
            dict. The project data.
        """
        project_tag = tags.get_or_create_workfile_tag()
        if project_tag is None:
            return {}

        instance_data = tags.get_tag_data(project_tag)
        return instance_data

    def _create_new_instance(self):
        """Create a new workfile instance.

        Returns:
            dict. The data of the instance to be created.
        """
        project_name = self.create_context.get_current_project_name()
        folder_path = self.create_context.get_current_folder_path()
        task_name = self.create_context.get_current_task_name()
        host_name = self.create_context.host_name
        variant = self.default_variant

        folder_entity = self.create_context.get_current_folder_entity()
        task_entity = self.create_context.get_current_task_entity()

        product_name = self.get_product_name(
            project_name,
            folder_entity,
            task_entity,
            variant,
            host_name,
        )

        instance_data = {
            "folderPath": folder_path,
            "task": task_name,
            "variant": variant,
            "productName": product_name,
        }
        instance_data.update(self.get_dynamic_data(
            variant,
            task_name,
            folder_entity,
            project_name,
            host_name,
            False,
        ))

        return instance_data

    def create(self, options=None):
        """Auto-create an instance by default."""
        instance_data = self.load_instance_data()
        if instance_data:
            return

        self.log.info("Auto-creating workfile instance...")
        data = self._create_new_instance()
        current_instance = CreatedInstance(
            self.product_type, data["productName"], data, self)
        self._add_instance_to_context(current_instance)

    def collect_instances(self):
        """Collect from timeline marker or create a new one."""
        data = self.load_instance_data()
        if not data:
            return

        instance = CreatedInstance(
            self.product_type, data["productName"], data, self
        )
        self._add_instance_to_context(instance)

    def update_instances(self, update_list):
        """Store changes in project metadata so they can be recollected.

        Args:
            update_list(List[UpdateData]): Gets list of tuples. Each item
                contain changed instance and its changes.
        """
        for created_inst, _ in update_list:
            data = created_inst.data_to_store()
            self.dump_instance_data(data)

collect_instances()

Collect from timeline marker or create a new one.

Source code in client/ayon_hiero/plugins/create/create_workfile.py
 99
100
101
102
103
104
105
106
107
108
def collect_instances(self):
    """Collect from timeline marker or create a new one."""
    data = self.load_instance_data()
    if not data:
        return

    instance = CreatedInstance(
        self.product_type, data["productName"], data, self
    )
    self._add_instance_to_context(instance)

create(options=None)

Auto-create an instance by default.

Source code in client/ayon_hiero/plugins/create/create_workfile.py
87
88
89
90
91
92
93
94
95
96
97
def create(self, options=None):
    """Auto-create an instance by default."""
    instance_data = self.load_instance_data()
    if instance_data:
        return

    self.log.info("Auto-creating workfile instance...")
    data = self._create_new_instance()
    current_instance = CreatedInstance(
        self.product_type, data["productName"], data, self)
    self._add_instance_to_context(current_instance)

dump_instance_data(data) classmethod

Dump instance data into AyonData project tag.

Parameters:

Name Type Description Default
data dict

The data to push to the project tag.

required
Source code in client/ayon_hiero/plugins/create/create_workfile.py
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@classmethod
def dump_instance_data(cls, data):
    """ Dump instance data into AyonData project tag.

    Args:
        data (dict): The data to push to the project tag.
    """
    project_tag = tags.get_or_create_workfile_tag(create=True)

    tag_data = {
        "metadata": data,
        "note": "AYON workfile data"
    }
    tags.update_tag(project_tag, tag_data)

load_instance_data()

Returns the data stored in AyonData project tag if any.

Returns:

Type Description

dict. The project data.

Source code in client/ayon_hiero/plugins/create/create_workfile.py
34
35
36
37
38
39
40
41
42
43
44
45
def load_instance_data(cls):
    """ Returns the data stored in AyonData project tag if any.

    Returns:
        dict. The project data.
    """
    project_tag = tags.get_or_create_workfile_tag()
    if project_tag is None:
        return {}

    instance_data = tags.get_tag_data(project_tag)
    return instance_data

update_instances(update_list)

Store changes in project metadata so they can be recollected.

Parameters:

Name Type Description Default
update_list(List[UpdateData])

Gets list of tuples. Each item contain changed instance and its changes.

required
Source code in client/ayon_hiero/plugins/create/create_workfile.py
110
111
112
113
114
115
116
117
118
119
def update_instances(self, update_list):
    """Store changes in project metadata so they can be recollected.

    Args:
        update_list(List[UpdateData]): Gets list of tuples. Each item
            contain changed instance and its changes.
    """
    for created_inst, _ in update_list:
        data = created_inst.data_to_store()
        self.dump_instance_data(data)