query the product id per project

This commit is contained in:
Kayla Man 2024-11-14 22:46:43 +08:00
parent 735409f9ac
commit 0bec953dec
4 changed files with 85 additions and 56 deletions

View file

@ -110,9 +110,9 @@ class SceneInventoryController:
representation_ids
)
def get_version_items(self, product_ids, representation_ids):
def get_version_items(self, project_name, product_ids):
return self._containers_model.get_version_items(
product_ids, representation_ids)
project_name, product_ids)
# Site Sync methods
def is_sitesync_enabled(self):

View file

@ -152,9 +152,20 @@ class InventoryModel(QtGui.QStandardItemModel):
for repre_info in repre_info_by_id.values()
if repre_info.is_valid
}
version_items_by_product_id = self._controller.get_version_items(
product_ids, project_names
)
project_products = {project_name: set() for project_name in project_names}
for representation_id, items in items_by_repre_id.items():
repre_info = repre_info_by_id.get(representation_id)
if repre_info and repre_info.is_valid:
product_id = repre_info.product_id
for item in items:
project_name = item.project_name
project_products[project_name].add(product_id)
version_items_by_product_id = {}
for project_name, product_ids in project_products.items():
version_items_by_product_id.update(self._controller.get_version_items(
project_name, product_ids
))
# SiteSync addon information
progress_by_id = self._controller.get_representations_site_progress(
repre_id
@ -236,7 +247,6 @@ class InventoryModel(QtGui.QStandardItemModel):
for container_item in container_items:
object_name = container_item.object_name or "<none>"
unique_name = repre_name + object_name
item = QtGui.QStandardItem()
item.setColumnCount(root_item.columnCount())
item.setData(container_item.namespace, QtCore.Qt.DisplayRole)
@ -251,7 +261,6 @@ class InventoryModel(QtGui.QStandardItemModel):
item.setData(True, IS_CONTAINER_ITEM_ROLE)
item.setData(unique_name, ITEM_UNIQUE_NAME_ROLE)
container_model_items.append(item)
if not container_model_items:
continue
@ -290,7 +299,7 @@ class InventoryModel(QtGui.QStandardItemModel):
group_item.setData(active_site_icon, ACTIVE_SITE_ICON_ROLE)
group_item.setData(remote_site_icon, REMOTE_SITE_ICON_ROLE)
group_item.setData(False, IS_CONTAINER_ITEM_ROLE)
print(group_item)
if version_color is not None:
group_item.setData(version_color, VERSION_COLOR_ROLE)

View file

@ -249,7 +249,6 @@ class ContainersModel:
).add(repre_id)
else:
output[repre_id] = repre_info
if not missing_repre_ids_by_project:
return output
@ -292,7 +291,7 @@ class ContainersModel:
output[repre_id] = repre_info
return output
def get_version_items(self, product_ids, project_names):
def get_version_items(self, project_name, product_ids):
if not product_ids:
return {}
missing_ids = {
@ -301,10 +300,7 @@ class ContainersModel:
if product_id not in self._version_items_by_product_id
}
product_ids_by_project = {
project_name: self._product_id_by_project.get(project_name)
for project_name in project_names
}
current_product_id = self._product_id_by_project.get(project_name)
if missing_ids:
status_items_by_name = {
status_item.name: status_item
@ -313,24 +309,22 @@ class ContainersModel:
def version_sorted(entity):
return entity["version"]
version_entities_list = []
if current_product_id not in missing_ids:
return
version_entities_by_product_id = {
product_id: []
for product_id in missing_ids
}
for project_name, product_id in product_ids_by_project.items():
version_entities = list(ayon_api.get_versions(
project_name,
product_ids={current_product_id},
fields={"id", "version", "productId", "status"}
))
version_entities.sort(key=version_sorted)
for version_entity in version_entities:
product_id = version_entity["productId"]
if product_id not in missing_ids:
continue
version_entities = list(ayon_api.get_versions(
project_name,
product_ids={product_id},
fields={"id", "version", "productId", "status"}
))
version_entities_list.extend(version_entities)
version_entities_list.sort(key=version_sorted)
for version_entity in version_entities_list:
product_id = version_entity["productId"]
version_entities_by_product_id[product_id].append(
version_entity
)

View file

@ -206,18 +206,20 @@ class SceneInventoryView(QtWidgets.QTreeView):
# Exclude items that are "NOT FOUND" since setting versions, updating
# and removal won't work for those items.
filtered_items = []
product_ids = set()
project_products = {}
version_ids = set()
project_names = set()
for container_item in container_items_by_id.values():
repre_id = container_item.representation_id
project_name = container_item.project_name
repre_info = repre_info_by_id.get(repre_id)
if repre_info and repre_info.is_valid:
filtered_items.append(container_item)
version_ids.add(repre_info.version_id)
product_ids.add(repre_info.product_id)
project_names.add(container_item.project_name)
product_id = repre_info.product_id
if project_name not in project_products:
project_products[project_name] = set()
project_products[project_name].add(product_id)
print("p_products", project_products)
# remove
remove_icon = qtawesome.icon("fa.remove", color=DEFAULT_COLOR)
remove_action = QtWidgets.QAction(remove_icon, "Remove items", menu)
@ -228,9 +230,12 @@ class SceneInventoryView(QtWidgets.QTreeView):
# Keep remove action for invalid items
menu.addAction(remove_action)
return
version_items_by_product_id = self._controller.get_version_items(
product_ids, project_names)
version_items_by_product_id = {}
for project_name, product_ids in project_products.items():
version_items_by_product_id.update(
self._controller.get_version_items(
project_name, product_ids)
)
has_outdated = False
has_loaded_hero_versions = False
has_available_hero_version = False
@ -736,14 +741,11 @@ class SceneInventoryView(QtWidgets.QTreeView):
container_items_by_id = self._controller.get_container_items_by_id(
item_ids
)
print(container_items_by_id, "container")
repre_ids = {
container_item.representation_id
for container_item in container_items_by_id.values()
}
project_names = {
container_item.project_name
for container_item in container_items_by_id.values()
}
repre_info_by_id = self._controller.get_representation_info_items(
repre_ids
)
@ -752,11 +754,25 @@ class SceneInventoryView(QtWidgets.QTreeView):
repre_info.product_id
for repre_info in repre_info_by_id.values()
}
project_products = {}
for container_item in container_items_by_id.values():
repre_id = container_item.representation_id
project_name = container_item.project_name
repre_info = repre_info_by_id.get(repre_id)
if repre_info and repre_info.is_valid:
if project_name not in project_products:
project_products[project_name] = set()
product_id = repre_info.product_id
project_products[project_name].add(product_id)
print("proj_product", project_products)
active_repre_info = repre_info_by_id[active_repre_id]
active_version_id = active_repre_info.version_id
active_product_id = active_repre_info.product_id
version_items_by_product_id = self._controller.get_version_items(
product_ids, project_names)
version_items_by_product_id = {}
for project_name, product_ids in project_products.items():
version_items_by_product_id.update(
self._controller.get_version_items(
project_name, product_ids))
version_items = list(
version_items_by_product_id[active_product_id].values()
)
@ -931,27 +947,37 @@ class SceneInventoryView(QtWidgets.QTreeView):
self._update_containers_to_version(item_ids, version=-1)
def _on_switch_to_versioned(self, item_ids):
containers_items_by_id = self._controller.get_container_items_by_id(
item_ids
)
# Get container items by ID
containers_items_by_id = self._controller.get_container_items_by_id(item_ids)
repre_ids = {
container_item.representation_id
for container_item in containers_items_by_id.values()
}
project_names = {
container_item.project_name
for container_item in containers_items_by_id.values()
# Extract project names and their corresponding representation IDs
project_name_to_repre_ids = {}
for container_item in containers_items_by_id.values():
project_name = container_item.project_name
repre_id = container_item.representation_id
if project_name not in project_name_to_repre_ids:
project_name_to_repre_ids[project_name] = set()
project_name_to_repre_ids[project_name].add(repre_id)
# Get representation info items by ID
repre_info_by_id = self._controller.get_representation_info_items(repre_ids)
# Create a dictionary to map project names to sets of product IDs
project_products = {
project_name: set() for project_name in project_name_to_repre_ids.keys()
}
repre_info_by_id = self._controller.get_representation_info_items(
repre_ids
)
product_ids = {
repre_info.product_id
for repre_info in repre_info_by_id.values()
if repre_info.is_valid
}
version_items_by_product_id = self._controller.get_version_items(
product_ids, project_names)
print("project_products", project_products)
version_items_by_product_id = {}
for project_name, product_ids in project_name_to_repre_ids.items():
version_items_by_product_id.update(
self._controller.get_version_items(
project_name, product_ids
)
)
update_containers = []
update_versions = []