mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
prepared some classes to handle settings locks
This commit is contained in:
parent
93c9fb2309
commit
ec405eb913
1 changed files with 162 additions and 0 deletions
|
|
@ -22,6 +22,168 @@ from .constants import (
|
|||
)
|
||||
|
||||
|
||||
class SettingsStateInfo:
|
||||
"""Helper state information for Settings state.
|
||||
|
||||
Is used to hold information about last save and last opened UI. Keep
|
||||
information about the time when that happened and on which machine under
|
||||
which user.
|
||||
|
||||
To create currrent machine and time information use 'create_new' method.
|
||||
"""
|
||||
|
||||
timestamp_format = "%Y-%m-%d %H:%M:%S.%f"
|
||||
|
||||
def __init__(
|
||||
self, timestamp, hostname, hostip, username, system_name, local_id
|
||||
):
|
||||
self.timestamp = timestamp
|
||||
self._timestamp_obj = datetime.datetime.strptime(
|
||||
timestamp, self.timestamp_format
|
||||
)
|
||||
self.hostname = hostname
|
||||
self.hostip = hostip
|
||||
self.username = username
|
||||
self.system_name = system_name
|
||||
self.local_id = local_id
|
||||
|
||||
def copy(self):
|
||||
return self.from_data(self.to_data())
|
||||
|
||||
@property
|
||||
def timestamp_obj(self):
|
||||
return self._timestamp_obj
|
||||
|
||||
@classmethod
|
||||
def create_new(cls):
|
||||
"""Create information about this machine for current time."""
|
||||
|
||||
from openpype.lib.pype_info import get_workstation_info
|
||||
|
||||
now = datetime.datetime.now()
|
||||
workstation_info = get_workstation_info()
|
||||
|
||||
return cls(
|
||||
now.strftime(cls.timestamp_format),
|
||||
workstation_info["hostname"],
|
||||
workstation_info["hostip"],
|
||||
workstation_info["username"],
|
||||
workstation_info["system_name"],
|
||||
workstation_info["local_id"]
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def from_data(cls, data):
|
||||
"""Create object from data."""
|
||||
|
||||
return cls(
|
||||
data["timestamp"],
|
||||
data["hostname"],
|
||||
data["hostip"],
|
||||
data["username"],
|
||||
data["system_name"],
|
||||
data["local_id"]
|
||||
)
|
||||
|
||||
def to_data(self):
|
||||
return {
|
||||
"timestamp": self.timestamp,
|
||||
"hostname": self.hostname,
|
||||
"hostip": self.hostip,
|
||||
"username": self.username,
|
||||
"system_name": self.system_name,
|
||||
"local_id": self.local_id,
|
||||
}
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, SettingsStateInfo):
|
||||
return False
|
||||
|
||||
if other.timestamp_obj != self.timestamp_obj:
|
||||
return False
|
||||
|
||||
return (
|
||||
self.hostname == other.hostname
|
||||
and self.hostip == other.hostip
|
||||
and self.username == other.username
|
||||
and self.system_name == other.system_name
|
||||
and self.local_id == other.local_id
|
||||
)
|
||||
|
||||
|
||||
class SettingsState:
|
||||
"""State of settings with last saved and last opened.
|
||||
|
||||
Args:
|
||||
openpype_version (str): OpenPype version string.
|
||||
settings_type (str): Type of settings. System or project settings.
|
||||
last_saved_info (Union[None, SettingsStateInfo]): Information about
|
||||
machine and time when were settings saved last time.
|
||||
last_opened_info (Union[None, SettingsStateInfo]): This is settings UI
|
||||
specific information similar to last saved describes who had opened
|
||||
settings as last.
|
||||
project_name (Union[None, str]): Identifier for project settings.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
openpype_version,
|
||||
settings_type,
|
||||
last_saved_info,
|
||||
last_opened_info,
|
||||
project_name=None
|
||||
):
|
||||
self.openpype_version = openpype_version
|
||||
self.settings_type = settings_type
|
||||
self.last_saved_info = last_saved_info
|
||||
self.last_opened_info = last_opened_info
|
||||
self.project_name = project_name
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, SettingsState):
|
||||
return False
|
||||
|
||||
return (
|
||||
self.openpype_version == other.openpype_version
|
||||
and self.settings_type == other.settings_type
|
||||
and self.last_saved_info == other.last_saved_info
|
||||
and self.last_opened_info == other.last_opened_info
|
||||
and self.project_name == other.project_name
|
||||
)
|
||||
|
||||
def copy(self):
|
||||
return self.__class__(
|
||||
self.openpype_version,
|
||||
self.settings_type,
|
||||
self.last_saved_info.copy(),
|
||||
self.last_opened_info.copy(),
|
||||
self.project_name
|
||||
)
|
||||
|
||||
def on_save(self, openpype_version):
|
||||
self.openpype_version = openpype_version
|
||||
self.last_saved_info = SettingsStateInfo.create_new()
|
||||
|
||||
@classmethod
|
||||
def from_document(cls, openpype_version, settings_type, document):
|
||||
document = document or {}
|
||||
last_saved_info = document.get("last_saved_info")
|
||||
if last_saved_info:
|
||||
last_saved_info = SettingsStateInfo.from_data(last_saved_info)
|
||||
|
||||
last_opened_info = document.get("last_opened_info")
|
||||
if last_opened_info:
|
||||
last_opened_info = SettingsStateInfo.from_data(last_opened_info)
|
||||
|
||||
return cls(
|
||||
openpype_version,
|
||||
settings_type,
|
||||
last_saved_info,
|
||||
last_opened_info,
|
||||
document.get("project_name")
|
||||
)
|
||||
|
||||
|
||||
@six.add_metaclass(ABCMeta)
|
||||
class SettingsHandler:
|
||||
@abstractmethod
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue