mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-27 14:22:37 +01:00
155 lines
5.1 KiB
Python
155 lines
5.1 KiB
Python
import collections
|
|
from openpype.client import (
|
|
get_versions,
|
|
get_subsets,
|
|
get_assets,
|
|
get_output_link_versions,
|
|
)
|
|
|
|
from qtpy import QtWidgets
|
|
|
|
|
|
class SimpleLinkView(QtWidgets.QWidget):
|
|
def __init__(self, dbcon, parent):
|
|
super(SimpleLinkView, self).__init__(parent=parent)
|
|
self.dbcon = dbcon
|
|
|
|
# TODO: display selected target
|
|
|
|
in_text = QtWidgets.QLabel("Inputs")
|
|
in_view = QtWidgets.QListWidget(parent=self)
|
|
out_text = QtWidgets.QLabel("Outputs")
|
|
out_view = QtWidgets.QListWidget(parent=self)
|
|
|
|
layout = QtWidgets.QGridLayout(self)
|
|
layout.setContentsMargins(0, 0, 0, 0)
|
|
layout.addWidget(in_text, 0, 0)
|
|
layout.addWidget(in_view, 1, 0)
|
|
layout.addWidget(out_text, 0, 1)
|
|
layout.addWidget(out_view, 1, 1)
|
|
|
|
self._in_view = in_view
|
|
self._out_view = out_view
|
|
self._version_doc_to_process = None
|
|
|
|
@property
|
|
def project_name(self):
|
|
return self.dbcon.current_project()
|
|
|
|
def clear(self):
|
|
self._in_view.clear()
|
|
self._out_view.clear()
|
|
|
|
def set_version(self, version_doc):
|
|
self.clear()
|
|
self._version_doc_to_process = version_doc
|
|
if version_doc and self.isVisible():
|
|
self._fill_values()
|
|
|
|
def showEvent(self, event):
|
|
super(SimpleLinkView, self).showEvent(event)
|
|
self._fill_values()
|
|
|
|
def _fill_values(self):
|
|
if self._version_doc_to_process is None:
|
|
return
|
|
version_doc = self._version_doc_to_process
|
|
self._version_doc_to_process = None
|
|
self._fill_inputs(version_doc)
|
|
self._fill_outputs(version_doc)
|
|
|
|
def _fill_inputs(self, version_doc):
|
|
version_ids = set()
|
|
for link in version_doc["data"].get("inputLinks", []):
|
|
# Backwards compatibility for "input" key used as "id"
|
|
if "id" not in link:
|
|
link_id = link["input"]
|
|
else:
|
|
link_id = link["id"]
|
|
version_ids.add(link_id)
|
|
|
|
version_docs = list(get_versions(
|
|
self.project_name,
|
|
version_ids=version_ids,
|
|
fields=["name", "parent"]
|
|
))
|
|
|
|
versions_by_subset_id = collections.defaultdict(list)
|
|
for version_doc in version_docs:
|
|
subset_id = version_doc["parent"]
|
|
versions_by_subset_id[subset_id].append(version_doc)
|
|
|
|
subset_docs = []
|
|
if versions_by_subset_id:
|
|
subset_docs = list(get_subsets(
|
|
self.project_name,
|
|
subset_ids=versions_by_subset_id.keys(),
|
|
fields=["_id", "name", "parent"]
|
|
))
|
|
|
|
asset_docs = []
|
|
subsets_by_asset_id = collections.defaultdict(list)
|
|
if subset_docs:
|
|
for subset_doc in subset_docs:
|
|
asset_id = subset_doc["parent"]
|
|
subsets_by_asset_id[asset_id].append(subset_doc)
|
|
|
|
asset_docs = list(get_assets(
|
|
self.project_name,
|
|
asset_ids=subsets_by_asset_id.keys(),
|
|
fields=["_id", "name"]
|
|
))
|
|
|
|
for asset_doc in asset_docs:
|
|
asset_id = asset_doc["_id"]
|
|
for subset_doc in subsets_by_asset_id[asset_id]:
|
|
subset_id = subset_doc["_id"]
|
|
for version_doc in versions_by_subset_id[subset_id]:
|
|
self._in_view.addItem("{} {} v{:0>3}".format(
|
|
asset_doc["name"],
|
|
subset_doc["name"],
|
|
version_doc["name"],
|
|
))
|
|
|
|
def _fill_outputs(self, version_doc):
|
|
version_docs = list(get_output_link_versions(
|
|
self.project_name,
|
|
version_doc["_id"],
|
|
fields=["name", "parent"]
|
|
))
|
|
versions_by_subset_id = collections.defaultdict(list)
|
|
for version_doc in version_docs:
|
|
subset_id = version_doc["parent"]
|
|
versions_by_subset_id[subset_id].append(version_doc)
|
|
|
|
subset_docs = []
|
|
if versions_by_subset_id:
|
|
subset_docs = list(get_subsets(
|
|
self.project_name,
|
|
subset_ids=versions_by_subset_id.keys(),
|
|
fields=["_id", "name", "parent"]
|
|
))
|
|
|
|
asset_docs = []
|
|
subsets_by_asset_id = collections.defaultdict(list)
|
|
if subset_docs:
|
|
for subset_doc in subset_docs:
|
|
asset_id = subset_doc["parent"]
|
|
subsets_by_asset_id[asset_id].append(subset_doc)
|
|
|
|
asset_docs = list(get_assets(
|
|
self.project_name,
|
|
asset_ids=subsets_by_asset_id.keys(),
|
|
fields=["_id", "name"]
|
|
))
|
|
|
|
for asset_doc in asset_docs:
|
|
asset_id = asset_doc["_id"]
|
|
for subset_doc in subsets_by_asset_id[asset_id]:
|
|
subset_id = subset_doc["_id"]
|
|
for version_doc in versions_by_subset_id[subset_id]:
|
|
self._out_view.addItem("{} {} v{:0>3}".format(
|
|
asset_doc["name"],
|
|
subset_doc["name"],
|
|
version_doc["name"],
|
|
))
|