mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
Fix - reworked alternative sites
Implements recursive relationship between alternative sites
This commit is contained in:
parent
ef74bfb1d7
commit
312d0309ab
1 changed files with 61 additions and 19 deletions
|
|
@ -1116,18 +1116,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 +1157,65 @@ 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 = {}
|
||||
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
|
||||
if not alt_site_pairs.get(site_name):
|
||||
alt_site_pairs[site_name] = []
|
||||
|
||||
return rec
|
||||
alt_site_pairs[site_name].extend(alt_sites)
|
||||
|
||||
for alt_site in alt_sites:
|
||||
if not alt_site_pairs.get(alt_site):
|
||||
alt_site_pairs[alt_site] = []
|
||||
alt_site_pairs[alt_site].extend([site_name])
|
||||
|
||||
# transitive relationship, eg site is alternative to another which is
|
||||
# alternative to nex site
|
||||
loop = True
|
||||
while loop:
|
||||
loop = False
|
||||
for site_name, alt_sites in alt_site_pairs.items():
|
||||
for alt_site in alt_sites:
|
||||
# safety against wrong config
|
||||
# {"SFTP": {"alternative_site": "SFTP"}
|
||||
if alt_site == site_name:
|
||||
continue
|
||||
|
||||
for alt_alt_site in alt_site_pairs.get(alt_site, []):
|
||||
if ( alt_alt_site != site_name
|
||||
and alt_alt_site not in alt_sites):
|
||||
alt_site_pairs[site_name].append(alt_alt_site)
|
||||
loop = True
|
||||
|
||||
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