This commit is contained in:
sjt-rvx 2025-12-17 13:54:14 +01:00 committed by GitHub
commit 2b6a785217
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 89 additions and 7 deletions

View file

@ -9,6 +9,9 @@ import qtawesome
from ayon_core.style import get_default_entity_icon_color
from ayon_core.tools.utils import get_qt_icon
from ayon_core.tools.utils.lib import format_version
from ayon_core.pipeline import template_data
from ayon_core.lib import filter_profiles
from ayon_core.settings import get_project_settings
ITEM_ID_ROLE = QtCore.Qt.UserRole + 1
NAME_COLOR_ROLE = QtCore.Qt.UserRole + 2
@ -128,13 +131,55 @@ class InventoryModel(QtGui.QStandardItemModel):
def outdated(self, item):
return item.get("isOutdated", True)
def _get_repre_info_template_data(self, repre_info):
fake_folder_entity = {
"name": repre_info.folder_name,
"id": repre_info.folder_id,
"folderType": repre_info.folder_type,
"path": repre_info.folder_path
}
folder_data = template_data.get_folder_template_data(
fake_folder_entity,
self._controller.get_current_project_name()
)
template_data = {
"product": {
"name": repre_info.product_name,
"type": repre_info.product_type,
},
"representation": {
"name": repre_info.representation_name,
}
}
template_data .update(folder_data)
return template_data
def refresh(self, selected=None):
"""Refresh the model"""
# for debugging or testing, injecting items from outside
container_items = self._controller.get_container_items()
self._clear_items()
# fetch the label settings
settings = get_project_settings(
self._controller.get_current_project_name())
selected_profile = filter_profiles(
settings["core"]["tools"]["inventory"]["profiles"],
{
"host_name": self._controller.get_host().name,
"task_name": self._controller.get_current_context()["task_name"]
},
keys_order=["host_name", "task_name"])
group_name_template = "{folder[name]}_{product[name]}: ({representation[name]})"
if selected_profile is not None:
group_name_template = selected_profile["inventory_name_format"]
items_by_repre_id = {}
project_names = set()
repre_ids_by_project = collections.defaultdict(set)
version_items_by_project = collections.defaultdict(dict)
@ -248,11 +293,9 @@ class InventoryModel(QtGui.QStandardItemModel):
status_name = None
else:
group_name = "{}_{}: ({})".format(
repre_info.folder_path.rsplit("/")[-1],
repre_info.product_name,
repre_info.representation_name
)
template_data = self._get_repre_info_template_data(repre_info)
group_name = group_name_template.format(**template_data)
item_icon = valid_item_icon
version_items = (

View file

@ -41,6 +41,7 @@ def representations_parent_ids_qraphql_query():
folder_field = product_field.add_field("folder")
folder_field.add_field("id")
folder_field.add_field("path")
folder_field.add_field("folderType")
return query
@ -126,6 +127,8 @@ class RepresentationInfo:
self,
folder_id,
folder_path,
folder_name,
folder_type,
product_id,
product_name,
product_type,
@ -136,6 +139,8 @@ class RepresentationInfo:
):
self.folder_id = folder_id
self.folder_path = folder_path
self.folder_name = folder_name
self.folder_type = folder_type
self.product_id = product_id
self.product_name = product_name
self.product_type = product_type
@ -268,6 +273,8 @@ class ContainersModel:
kwargs = {
"folder_id": None,
"folder_path": None,
"folder_name": None,
"folder_type": None,
"product_id": None,
"product_name": None,
"product_type": None,
@ -283,6 +290,8 @@ class ContainersModel:
if folder:
kwargs["folder_id"] = folder["id"]
kwargs["folder_path"] = folder["path"]
kwargs["folder_name"] = folder["path"].split("/")[-1]
kwargs["folder_type"] = folder["folderType"]
if product:
product_type = product["productType"]
product_base_type = product.get("productBaseType")

View file

@ -379,6 +379,29 @@ class PublishToolModel(BaseSettingsModel):
)
class InventoryTemplateNameProfile(BaseSettingsModel):
_layout = "expanded"
host_names: list[str] = SettingsField(
title="Host names",
default_factory=list
)
task_name: list[str] = SettingsField(
title="Task names",
default_factory=list
)
template: str = SettingsField(
title="Template",
default_factory=str
)
class InventoryToolModel(BaseSettingsModel):
profiles: list[InventoryTemplateNameProfile] = SettingsField(
default_factory=list,
title="Inventory label templates"
)
class GlobalToolsModel(BaseSettingsModel):
ayon_menu: AYONMenuModel = SettingsField(
default_factory=AYONMenuModel,
@ -400,6 +423,10 @@ class GlobalToolsModel(BaseSettingsModel):
default_factory=PublishToolModel,
title="Publish"
)
inventory: InventoryToolModel = SettingsField(
default_factory=InventoryToolModel,
title="Inventory"
)
DEFAULT_TOOLS_VALUES = {
@ -690,7 +717,10 @@ DEFAULT_TOOLS_VALUES = {
"task_names": [],
"template_name": "simpleUnrealTextureHero"
}
],
"comment_minimum_required_chars": 0,
]
},
"comment_minimum_required_chars": 0,
"inventory": {
"profiles": []
}
}