mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-26 22:02:15 +01:00
82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
import os
|
|
from openpype_modules import sync_server
|
|
|
|
from Qt import QtGui
|
|
|
|
|
|
def walk_hierarchy(node):
|
|
"""Recursively yield group node."""
|
|
for child in node.children():
|
|
if child.get("isGroupNode"):
|
|
yield child
|
|
|
|
for _child in walk_hierarchy(child):
|
|
yield _child
|
|
|
|
|
|
def get_site_icons():
|
|
resource_path = os.path.join(
|
|
os.path.dirname(sync_server.sync_server_module.__file__),
|
|
"providers",
|
|
"resources"
|
|
)
|
|
icons = {}
|
|
# TODO get from sync module
|
|
for provider in ["studio", "local_drive", "gdrive"]:
|
|
pix_url = "{}/{}.png".format(resource_path, provider)
|
|
icons[provider] = QtGui.QIcon(pix_url)
|
|
|
|
return icons
|
|
|
|
|
|
def get_progress_for_repre(repre_doc, active_site, remote_site):
|
|
"""
|
|
Calculates average progress for representation.
|
|
|
|
If site has created_dt >> fully available >> progress == 1
|
|
|
|
Could be calculated in aggregate if it would be too slow
|
|
Args:
|
|
repre_doc(dict): representation dict
|
|
Returns:
|
|
(dict) with active and remote sites progress
|
|
{'studio': 1.0, 'gdrive': -1} - gdrive site is not present
|
|
-1 is used to highlight the site should be added
|
|
{'studio': 1.0, 'gdrive': 0.0} - gdrive site is present, not
|
|
uploaded yet
|
|
"""
|
|
progress = {active_site: -1, remote_site: -1}
|
|
if not repre_doc:
|
|
return progress
|
|
|
|
files = {active_site: 0, remote_site: 0}
|
|
doc_files = repre_doc.get("files") or []
|
|
for doc_file in doc_files:
|
|
if not isinstance(doc_file, dict):
|
|
continue
|
|
|
|
sites = doc_file.get("sites") or []
|
|
for site in sites:
|
|
if (
|
|
# Pype 2 compatibility
|
|
not isinstance(site, dict)
|
|
# Check if site name is one of progress sites
|
|
or site["name"] not in progress
|
|
):
|
|
continue
|
|
|
|
files[site["name"]] += 1
|
|
norm_progress = max(progress[site["name"]], 0)
|
|
if site.get("created_dt"):
|
|
progress[site["name"]] = norm_progress + 1
|
|
elif site.get("progress"):
|
|
progress[site["name"]] = norm_progress + site["progress"]
|
|
else: # site exists, might be failed, do not add again
|
|
progress[site["name"]] = 0
|
|
|
|
# for example 13 fully avail. files out of 26 >> 13/26 = 0.5
|
|
avg_progress = {
|
|
active_site: progress[active_site] / max(files[active_site], 1),
|
|
remote_site: progress[remote_site] / max(files[remote_site], 1)
|
|
}
|
|
return avg_progress
|