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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137 | class CreateEditorialPackage(plugin.HieroCreator):
"""Create Editorial Package."""
identifier = "io.ayon.creators.hiero.editorial_pkg"
label = "Editorial Package"
product_base_type = "editorial_pkg"
product_type = product_base_type
icon = "camera"
defaults = ["Main"]
# Editorial_Pkg export relies on QuickExport feature
# that is only available since 16.0.
# https://learn.foundry.com/hiero/developers/16.0/HieroPythonDevGuide/quick_export.html
enabled = hiero.core.env.get("VersionMajor", 0) >= 16
def get_pre_create_attr_defs(self) -> List[AbstractAttrDef]:
return _CREATE_ATTR_DEFS
def get_attr_defs_for_instance(
self,
instance: CreatedInstance
) -> List[AbstractAttrDef]:
return _CREATE_ATTR_DEFS
@classmethod
def _get_edl_tag_name(cls, guid: str) -> str:
return f"{guid}_{cls.product_type}"
@classmethod
def dump_instance_data(
cls,
guid: str,
data: Dict,
):
edpkg_tag = tags.get_or_create_workfile_tag(
cls._get_edl_tag_name(guid),
create=True
)
tag_data = {
"metadata": data,
"note": "AYON editorial pkg data",
}
tags.update_tag(edpkg_tag, tag_data)
def create(
self,
product_name: str,
instance_data: Dict[str, Any],
pre_create_data: Dict[str, Any]
):
super().create(
product_name,
instance_data,
pre_create_data
)
current_sequence = lib.get_current_sequence()
if current_sequence is None:
raise CreatorError("No active sequence.")
instance_data["guid"] = current_sequence.guid()
instance_data["label"] = f"{product_name} ({current_sequence.name()})"
instance_data["creator_attributes"] = {
"review": pre_create_data["review"]
}
product_type = instance_data.get("productType")
if not product_type:
product_type = self.product_base_type
new_instance = CreatedInstance(
product_base_type=self.product_base_type,
product_type=product_type,
product_name=product_name,
data=instance_data,
creator=self,
)
self._add_instance_to_context(new_instance)
def collect_instances(self):
current_project = lib.get_current_project()
project_tag_bin = current_project.tagsBin()
for tag_bin in project_tag_bin.bins():
if tag_bin.name() != constants.AYON_WORKFILE_TAG_BIN:
continue
for item in tag_bin.items():
if (
not isinstance(item, hiero.core.Tag)
or not item.name().endswith(self.product_type)
):
continue
instance_data = tags.get_tag_data(item)
product_type = instance_data.get("productType")
if not product_type:
product_type = self.product_base_type
instance = CreatedInstance(
product_base_type=self.product_base_type,
product_type=product_type,
product_name=instance_data["productName"],
data=instance_data,
creator=self,
)
self._add_instance_to_context(instance)
def update_instances(self, update_list: List[CreatedInstance]):
for created_inst, _ in update_list:
data = created_inst.data_to_store()
guid = created_inst.data["guid"]
self.dump_instance_data(guid, data)
def remove_instances(self, instances: List[CreatedInstance]):
for inst in instances:
guid = inst.data["guid"]
tag_name = self._get_edl_tag_name(guid)
tags.remove_workfile_tag(tag_name)
self._remove_instance_from_context(inst)
|