From 29763581e9af6e56d86bae3a4e4f3de244a9c540 Mon Sep 17 00:00:00 2001 From: Petr Kalis Date: Thu, 10 Dec 2020 19:02:00 +0100 Subject: [PATCH] Fix schema, standardize to 'Sync Server' as a key for now Handled system wide disabling in integrate_new --- pype/modules/sync_server/__init__.py | 2 +- pype/modules/sync_server/sync_server.py | 78 +++++++++++++++---- pype/plugins/global/publish/integrate_new.py | 13 +--- .../defaults/project_settings/global.json | 4 +- .../schema_project_syncserver.json | 2 +- .../system_schema/schema_modules.json | 2 +- 6 files changed, 71 insertions(+), 30 deletions(-) diff --git a/pype/modules/sync_server/__init__.py b/pype/modules/sync_server/__init__.py index d7590e24e0..7452b5be1a 100644 --- a/pype/modules/sync_server/__init__.py +++ b/pype/modules/sync_server/__init__.py @@ -1,4 +1,4 @@ -from .sync_server import SyncServer +from pype.modules.sync_server.sync_server import SyncServer def tray_init(tray_widget, main_widget): diff --git a/pype/modules/sync_server/sync_server.py b/pype/modules/sync_server/sync_server.py index 5f2fbaf2fb..23d1e13bc3 100644 --- a/pype/modules/sync_server/sync_server.py +++ b/pype/modules/sync_server/sync_server.py @@ -1,4 +1,8 @@ -from pype.api import get_project_settings, get_system_settings, Logger +from pype.api import ( + get_project_settings, + get_system_settings, + Logger, + get_current_project_settings) import threading import asyncio @@ -92,20 +96,11 @@ class SyncServer(): self.connection = AvalonMongoDB() try: - module_presets = get_system_settings().\ - get("modules").get("Sync Server") + if SyncServer.is_enabled(True): + self.presets = self.get_synced_presets() + self.set_active_sites(self.presets) - if not module_presets: - raise ValueError("No system setting for sync.") - - if not module_presets.get("enabled"): - log.info("Sync server disabled system wide.") - return - - self.presets = self.get_synced_presets() - self.set_active_sites(self.presets) - - self.sync_server_thread = SyncServerThread(self) + self.sync_server_thread = SyncServerThread(self) except ValueError: log.info("No system setting for sync. Not syncing.") except KeyError: @@ -115,6 +110,57 @@ class SyncServer(): "no syncing possible"). format(str(self.presets)), exc_info=True) + @staticmethod + def is_enabled(raise_error=False): + """" + Returns true if synchronization in globally enabled by settings + + raise_error (bool): if missing settings should result in + exception + """ + module_presets = get_system_settings(). \ + get("modules").get("Sync Server") + + if not module_presets: + if raise_error: + raise ValueError("No system setting for sync.") + log.info("No system setting for sync.") + return False + + if not module_presets.get("enabled"): + log.info("Sync server disabled system wide.") + return False + + return True + + @staticmethod + def get_sites_for_project(project_name=None): + """ + Checks if sync is enabled globally and on project. + In that case return local and remote site + + Args: + project_name (str): + + Returns: + (tuple): of strings, labels for (local_site, remote_site) + """ + if SyncServer.is_enabled(False): + if project_name: + settings = get_project_settings(project_name) + else: + settings = get_current_project_settings() + + sync_server_presets = settings["global"]["Sync Server"]["config"] + if settings["global"]["Sync Server"]["enabled"]: + local_site = sync_server_presets.get("active_site", + "studio").strip() + remote_site = sync_server_presets.get("remote_site") + + return local_site, remote_site + + return 'studio', None + def get_synced_presets(self): """ Collects all projects which have enabled syncing and their settings @@ -142,9 +188,9 @@ class SyncServer(): empty if no settings or sync is disabled """ settings = get_project_settings(project_name) - sync_settings = settings.get("global")["sync_server"] + sync_settings = settings.get("global")["Sync Server"] if not sync_settings: - log.info("No project setting for sync_server, not syncing.") + log.info("No project setting for Sync Server, not syncing.") return {} if sync_settings.get("enabled"): return sync_settings diff --git a/pype/plugins/global/publish/integrate_new.py b/pype/plugins/global/publish/integrate_new.py index d98c68ae80..debfa47aca 100644 --- a/pype/plugins/global/publish/integrate_new.py +++ b/pype/plugins/global/publish/integrate_new.py @@ -16,6 +16,7 @@ from avalon.vendor import filelink import pype.api from datetime import datetime from pype.api import config +from pype.modules.sync_server import SyncServer # this is needed until speedcopy for linux is fixed if sys.platform == "win32": @@ -933,15 +934,9 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): remote_site = None sync_server_presets = None try: - settings = pype.api.get_current_project_settings() - sync_settings = settings["global"]["sync_server"] - - if sync_settings["enabled"]: - sync_server_presets = sync_settings["config"] - local_site = sync_server_presets.get("active_site", - "studio").strip() - remote_site = sync_server_presets.get("remote_site") - except KeyError: + if SyncServer.is_enabled(raise_error=True): + local_site, remote_site = SyncServer.get_sites_for_project() + except ValueError: log.debug(("There are not set presets for SyncServer." " No credentials provided, no synching possible"). format(str(sync_server_presets))) diff --git a/pype/settings/defaults/project_settings/global.json b/pype/settings/defaults/project_settings/global.json index ed7dc52cac..44c164362a 100644 --- a/pype/settings/defaults/project_settings/global.json +++ b/pype/settings/defaults/project_settings/global.json @@ -179,7 +179,7 @@ } } }, - "sync_server": { + "Sync Server": { "enabled": false, "config": { "local_id": "local_0", @@ -196,4 +196,4 @@ } } } -} +} \ No newline at end of file diff --git a/pype/tools/settings/settings/gui_schemas/projects_schema/schema_project_syncserver.json b/pype/tools/settings/settings/gui_schemas/projects_schema/schema_project_syncserver.json index 396e4ca2dc..ebc94d0cfc 100644 --- a/pype/tools/settings/settings/gui_schemas/projects_schema/schema_project_syncserver.json +++ b/pype/tools/settings/settings/gui_schemas/projects_schema/schema_project_syncserver.json @@ -1,6 +1,6 @@ { "type": "dict", - "key": "sync_server", + "key": "Sync Server", "label": "Sync Server (currently unused)", "collapsable": true, "checkbox_key": "enabled", diff --git a/pype/tools/settings/settings/gui_schemas/system_schema/schema_modules.json b/pype/tools/settings/settings/gui_schemas/system_schema/schema_modules.json index bcd7bcb8ca..88e3010603 100644 --- a/pype/tools/settings/settings/gui_schemas/system_schema/schema_modules.json +++ b/pype/tools/settings/settings/gui_schemas/system_schema/schema_modules.json @@ -100,7 +100,7 @@ ] }, { "type": "dict", - "key": "sync_server", + "key": "Sync Server", "label": "Sync Server", "collapsable": true, "checkbox_key": "enabled",