mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #3018 from pypeclub/bugfix/fix_alternate_sites
SiteSync: fix transitive alternate sites, fix dropdown in Local Settings
This commit is contained in:
commit
92bf8d0035
2 changed files with 62 additions and 19 deletions
|
|
@ -848,6 +848,11 @@ class SyncServerModule(OpenPypeModule, ITrayModule):
|
|||
if self.enabled and sync_settings.get('enabled'):
|
||||
sites.append(self.LOCAL_SITE)
|
||||
|
||||
active_site = sync_settings["config"]["active_site"]
|
||||
# for Tray running background process
|
||||
if active_site not in sites and active_site == get_local_site_id():
|
||||
sites.append(active_site)
|
||||
|
||||
return sites
|
||||
|
||||
def tray_init(self):
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import errno
|
|||
import six
|
||||
import re
|
||||
import shutil
|
||||
from collections import deque, defaultdict
|
||||
|
||||
from bson.objectid import ObjectId
|
||||
from pymongo import DeleteOne, InsertOne
|
||||
|
|
@ -1116,18 +1117,17 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin):
|
|||
rec["sites"].append(meta)
|
||||
already_attached_sites[meta["name"]] = None
|
||||
|
||||
# add alternative sites
|
||||
rec, already_attached_sites = self._add_alternative_sites(
|
||||
system_sync_server_presets, already_attached_sites, rec)
|
||||
|
||||
# add skeleton for site where it should be always synced to
|
||||
for always_on_site in always_accesible:
|
||||
for always_on_site in set(always_accesible):
|
||||
if always_on_site not in already_attached_sites.keys():
|
||||
meta = {"name": always_on_site.strip()}
|
||||
rec["sites"].append(meta)
|
||||
already_attached_sites[meta["name"]] = None
|
||||
|
||||
# add alternative sites
|
||||
rec = self._add_alternative_sites(system_sync_server_presets,
|
||||
already_attached_sites,
|
||||
rec)
|
||||
|
||||
log.debug("final sites:: {}".format(rec["sites"]))
|
||||
|
||||
return rec
|
||||
|
|
@ -1158,22 +1158,60 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin):
|
|||
"""
|
||||
conf_sites = system_sync_server_presets.get("sites", {})
|
||||
|
||||
alt_site_pairs = self._get_alt_site_pairs(conf_sites)
|
||||
|
||||
already_attached_keys = list(already_attached_sites.keys())
|
||||
for added_site in already_attached_keys:
|
||||
real_created = already_attached_sites[added_site]
|
||||
for alt_site in alt_site_pairs.get(added_site, []):
|
||||
if alt_site in already_attached_sites.keys():
|
||||
continue
|
||||
meta = {"name": alt_site}
|
||||
# alt site inherits state of 'created_dt'
|
||||
if real_created:
|
||||
meta["created_dt"] = real_created
|
||||
rec["sites"].append(meta)
|
||||
already_attached_sites[meta["name"]] = real_created
|
||||
|
||||
return rec, already_attached_sites
|
||||
|
||||
def _get_alt_site_pairs(self, conf_sites):
|
||||
"""Returns dict of site and its alternative sites.
|
||||
|
||||
If `site` has alternative site, it means that alt_site has 'site' as
|
||||
alternative site
|
||||
Args:
|
||||
conf_sites (dict)
|
||||
Returns:
|
||||
(dict): {'site': [alternative sites]...}
|
||||
"""
|
||||
alt_site_pairs = defaultdict(list)
|
||||
for site_name, site_info in conf_sites.items():
|
||||
alt_sites = set(site_info.get("alternative_sites", []))
|
||||
already_attached_keys = list(already_attached_sites.keys())
|
||||
for added_site in already_attached_keys:
|
||||
if added_site in alt_sites:
|
||||
if site_name in already_attached_keys:
|
||||
continue
|
||||
meta = {"name": site_name}
|
||||
real_created = already_attached_sites[added_site]
|
||||
# alt site inherits state of 'created_dt'
|
||||
if real_created:
|
||||
meta["created_dt"] = real_created
|
||||
rec["sites"].append(meta)
|
||||
already_attached_sites[meta["name"]] = real_created
|
||||
alt_site_pairs[site_name].extend(alt_sites)
|
||||
|
||||
return rec
|
||||
for alt_site in alt_sites:
|
||||
alt_site_pairs[alt_site].append(site_name)
|
||||
|
||||
for site_name, alt_sites in alt_site_pairs.items():
|
||||
sites_queue = deque(alt_sites)
|
||||
while sites_queue:
|
||||
alt_site = sites_queue.popleft()
|
||||
|
||||
# safety against wrong config
|
||||
# {"SFTP": {"alternative_site": "SFTP"}
|
||||
if alt_site == site_name or alt_site not in alt_site_pairs:
|
||||
continue
|
||||
|
||||
for alt_alt_site in alt_site_pairs[alt_site]:
|
||||
if (
|
||||
alt_alt_site != site_name
|
||||
and alt_alt_site not in alt_sites
|
||||
):
|
||||
alt_sites.append(alt_alt_site)
|
||||
sites_queue.append(alt_alt_site)
|
||||
|
||||
return alt_site_pairs
|
||||
|
||||
def handle_destination_files(self, integrated_file_sizes, mode):
|
||||
""" Clean destination files
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue