OP-3026 - first implementation of saving settings changes to DB

This logs all changes in Settings to separate collection ('setting_log') to help debug/trace changes.
This functionality is pretty basic as it will be replaced by Ayon implementation in the future.
This commit is contained in:
Petr Kalis 2023-02-16 16:10:03 +01:00
parent 0e2f495966
commit 2fce95a9df
2 changed files with 37 additions and 1 deletions

View file

@ -235,6 +235,18 @@ class SettingsHandler(object):
"""
pass
@abstractmethod
def save_change_log(self, project_name, changes, settings_type):
"""Stores changes to settings to separate logging collection.
Args:
project_name(str, null): Project name for which overrides are
or None for global settings.
changes(dict): Data of project overrides with override metadata.
settings_type (str): system|project|anatomy
"""
pass
@abstractmethod
def get_studio_system_settings_overrides(self, return_version):
"""Studio overrides of system settings."""
@ -913,6 +925,28 @@ class MongoSettingsHandler(SettingsHandler):
return data
def save_change_log(self, project_name, changes, settings_type):
"""Log all settings changes to separate collection"""
if not changes:
return
from openpype.lib import get_local_site_id
if settings_type == "project" and not project_name:
project_name = "default"
document = {
"user": get_local_site_id(),
"date_created": datetime.datetime.now(),
"project": project_name,
"settings_type": settings_type,
"changes": changes
}
collection_name = "settings_log"
collection = (self.settings_collection[self.database_name]
[collection_name])
collection.insert_one(document)
def _save_project_anatomy_data(self, project_name, data_cache):
# Create copy of data as they will be modified during save
new_data = data_cache.data_copy()

View file

@ -159,6 +159,7 @@ def save_studio_settings(data):
except SaveWarningExc as exc:
warnings.extend(exc.warnings)
_SETTINGS_HANDLER.save_change_log(None, changes, "system")
_SETTINGS_HANDLER.save_studio_settings(data)
if warnings:
raise SaveWarningExc(warnings)
@ -218,7 +219,7 @@ def save_project_settings(project_name, overrides):
)
except SaveWarningExc as exc:
warnings.extend(exc.warnings)
_SETTINGS_HANDLER.save_change_log(project_name, changes, "project")
_SETTINGS_HANDLER.save_project_settings(project_name, overrides)
if warnings:
@ -280,6 +281,7 @@ def save_project_anatomy(project_name, anatomy_data):
except SaveWarningExc as exc:
warnings.extend(exc.warnings)
_SETTINGS_HANDLER.save_change_log(project_name, changes, "anatomy")
_SETTINGS_HANDLER.save_project_anatomy(project_name, anatomy_data)
if warnings: