diff --git a/openpype/modules/sync_server/providers/dropbox.py b/openpype/modules/sync_server/providers/dropbox.py index e026ae7ef6..3515aee93f 100644 --- a/openpype/modules/sync_server/providers/dropbox.py +++ b/openpype/modules/sync_server/providers/dropbox.py @@ -22,7 +22,7 @@ class DropboxHandler(AbstractProvider): ) return - if not self.presets["enabled"]: + if not self.presets.get("enabled"): self.log.debug("Sync Server: Site {} not enabled for {}.". format(site_name, project_name)) return diff --git a/openpype/modules/sync_server/providers/gdrive.py b/openpype/modules/sync_server/providers/gdrive.py index 9a3ce89cf5..297a5c9fec 100644 --- a/openpype/modules/sync_server/providers/gdrive.py +++ b/openpype/modules/sync_server/providers/gdrive.py @@ -74,7 +74,7 @@ class GDriveHandler(AbstractProvider): ) return - if not self.presets["enabled"]: + if not self.presets.get("enabled"): self.log.debug( "Sync Server: Site {} not enabled for {}.".format( site_name, project_name diff --git a/openpype/modules/sync_server/providers/local_drive.py b/openpype/modules/sync_server/providers/local_drive.py index 8f55dc529b..98bdb487da 100644 --- a/openpype/modules/sync_server/providers/local_drive.py +++ b/openpype/modules/sync_server/providers/local_drive.py @@ -5,6 +5,7 @@ import threading import time from openpype.lib import Logger +from openpype.lib.local_settings import get_local_site_id from openpype.pipeline import Anatomy from .abstract_provider import AbstractProvider @@ -220,6 +221,6 @@ class LocalDriveHandler(AbstractProvider): def _normalize_site_name(self, site_name): """Transform user id to 'local' for Local settings""" - if site_name != 'studio': + if site_name == get_local_site_id(): return 'local' return site_name diff --git a/openpype/modules/sync_server/providers/sftp.py b/openpype/modules/sync_server/providers/sftp.py index 40f11cb9dd..c41edc78bc 100644 --- a/openpype/modules/sync_server/providers/sftp.py +++ b/openpype/modules/sync_server/providers/sftp.py @@ -72,7 +72,7 @@ class SFTPHandler(AbstractProvider): Returns: (boolean) """ - return self.presets["enabled"] and self.conn is not None + return self.presets.get("enabled") and self.conn is not None @classmethod def get_system_settings_schema(cls): diff --git a/openpype/modules/sync_server/sync_server_module.py b/openpype/modules/sync_server/sync_server_module.py index f9b99da02b..9cd84680f6 100644 --- a/openpype/modules/sync_server/sync_server_module.py +++ b/openpype/modules/sync_server/sync_server_module.py @@ -1368,13 +1368,19 @@ class SyncServerModule(OpenPypeModule, ITrayModule): """ sync_sett = self.sync_system_settings project_enabled = True + project_settings = None if project_name: project_enabled = project_name in self.get_enabled_projects() + project_settings = self.get_sync_project_setting(project_name) sync_enabled = sync_sett["enabled"] and project_enabled system_sites = {} if sync_enabled: for site, detail in sync_sett.get("sites", {}).items(): + if project_settings: + site_settings = project_settings["sites"].get(site) + if site_settings: + detail.update(site_settings) system_sites[site] = detail system_sites.update(self._get_default_site_configs(sync_enabled, @@ -1396,14 +1402,22 @@ class SyncServerModule(OpenPypeModule, ITrayModule): exclude_locals=True) roots = {} for root, config in anatomy_sett["roots"].items(): - roots[root] = config[platform.system().lower()] + roots[root] = config studio_config = { + 'enabled': True, 'provider': 'local_drive', "root": roots } all_sites = {self.DEFAULT_SITE: studio_config} if sync_enabled: - all_sites[get_local_site_id()] = {'provider': 'local_drive'} + all_sites[get_local_site_id()] = {'enabled': True, + 'provider': 'local_drive', + "root": roots} + # duplicate values for normalized local name + all_sites["local"] = { + 'enabled': True, + 'provider': 'local_drive', + "root": roots} return all_sites def get_provider_for_site(self, project_name=None, site=None): diff --git a/openpype/pipeline/anatomy.py b/openpype/pipeline/anatomy.py index 908dc2b187..a6750ede7c 100644 --- a/openpype/pipeline/anatomy.py +++ b/openpype/pipeline/anatomy.py @@ -24,6 +24,7 @@ from openpype.lib.path_templates import ( FormatObject, ) from openpype.lib.log import Logger +from openpype.lib import get_local_site_id log = Logger.get_logger(__name__) @@ -60,6 +61,10 @@ class BaseAnatomy(object): project_name = project_doc["name"] self.project_name = project_name + if site_name not in ["studio", "local", get_local_site_id()]: + raise RuntimeError("Anatomy could be created only for default " + "local sites not for {}".format(site_name)) + self._site_name = site_name self._data = self._prepare_anatomy_data( diff --git a/openpype/tools/settings/local_settings/projects_widget.py b/openpype/tools/settings/local_settings/projects_widget.py index b330d54dec..bdf291524c 100644 --- a/openpype/tools/settings/local_settings/projects_widget.py +++ b/openpype/tools/settings/local_settings/projects_widget.py @@ -248,6 +248,9 @@ class SitesWidget(QtWidgets.QWidget): main_layout.addWidget(comboboxes_widget, 0) main_layout.addWidget(content_widget, 1) + active_site_widget.value_changed.connect(self.refresh) + remote_site_widget.value_changed.connect(self.refresh) + self.active_site_widget = active_site_widget self.remote_site_widget = remote_site_widget @@ -268,25 +271,29 @@ class SitesWidget(QtWidgets.QWidget): self.modules_manager.modules_by_name["sync_server"] ) - # This is temporary modification - # - whole logic here should be in sync module's providers - site_names = sync_server_module.get_active_sites_from_settings( - self.project_settings["project_settings"].value - ) + site_configs = sync_server_module.get_all_site_configs( + self._project_name) roots_entity = ( self.project_settings[PROJECT_ANATOMY_KEY][LOCAL_ROOTS_KEY] ) - + site_names = [self.active_site_widget.current_text(), + self.remote_site_widget.current_text()] output = [] for site_name in site_names: + if not site_name: + continue + site_inputs = [] - for root_name, path_entity in roots_entity.items(): - platform_entity = path_entity[platform.system().lower()] + site_config = site_configs[site_name] + for root_name, path_entity in site_config.get("root", {}).items(): + if not path_entity: + continue + platform_value = path_entity[platform.system().lower()] site_inputs.append({ "label": root_name, "key": root_name, - "value": platform_entity.value + "value": platform_value }) output.append( @@ -436,6 +443,7 @@ class SitesWidget(QtWidgets.QWidget): class _SiteCombobox(QtWidgets.QWidget): input_label = None + value_changed = QtCore.Signal() def __init__(self, modules_manager, project_settings, parent): super(_SiteCombobox, self).__init__(parent) @@ -661,6 +669,7 @@ class _SiteCombobox(QtWidgets.QWidget): self._set_local_settings_value(self.current_text()) self._update_style() + self.value_changed.emit() def _set_local_settings_value(self, value): raise NotImplementedError(