From c5a68379ca8a6559c8548f726c2b1df5763376fd Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Wed, 3 Jul 2024 15:49:41 +0200 Subject: [PATCH] Fix for dirmap for non local nor studio sites Site Sync addon throws ValueError for no local/studio sites as it doesn't make sense to override roots for sftp or gdrive. This handles gracefully this exception. --- client/ayon_core/host/dirmap.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/client/ayon_core/host/dirmap.py b/client/ayon_core/host/dirmap.py index 8766e7485d..fa3996e5fb 100644 --- a/client/ayon_core/host/dirmap.py +++ b/client/ayon_core/host/dirmap.py @@ -181,25 +181,23 @@ class HostDirmap(object): cached=False) # overrides for roots set in `Site Settings` - active_roots = sitesync_addon.get_site_root_overrides( - project_name, active_site) - remote_roots = sitesync_addon.get_site_root_overrides( - project_name, remote_site) + active_roots_overrides = self._get_site_root_overrides( + sitesync_addon, project_name, active_site) - self.log.debug("active roots overrides {}".format(active_roots)) - self.log.debug("remote roots overrides {}".format(remote_roots)) + remote_roots_overrides = self._get_site_root_overrides( + sitesync_addon, project_name, remote_site) current_platform = platform.system().lower() remote_provider = sitesync_addon.get_provider_for_site( project_name, remote_site ) # dirmap has sense only with regular disk provider, in the workfile - # won't be root on cloud or sftp provider + # won't be root on cloud or sftp provider so fallback to studio if remote_provider != "local_drive": remote_site = "studio" - for root_name, active_site_dir in active_roots.items(): + for root_name, active_site_dir in active_roots_overrides.items(): remote_site_dir = ( - remote_roots.get(root_name) + remote_roots_overrides.get(root_name) or sync_settings["sites"][remote_site]["root"][root_name] ) @@ -220,3 +218,19 @@ class HostDirmap(object): self.log.debug("local sync mapping:: {}".format(mapping)) return mapping + + def _get_site_root_overrides( + self, sitesync_addon, project_name, site_name): + """Safely handle root overrides. + + SiteSync raises ValueError for non local or studio sites. + """ + try: + site_roots_overrides = sitesync_addon.get_site_root_overrides( + project_name, site_name) + except ValueError: + site_roots_overrides = {} + self.log.debug("{} roots overrides {}".format( + site_name, site_roots_overrides)) + + return site_roots_overrides