defaults must be set to be able to change any overrides

This commit is contained in:
iLLiCiTiT 2021-01-25 19:25:18 +01:00
parent 8abc15e341
commit 73f441abc4
4 changed files with 79 additions and 4 deletions

View file

@ -418,7 +418,7 @@ class RootEntity(BaseEntity):
value = studio_overrides.get(key, NOT_SET)
child_obj.update_studio_values(value)
self.set_override_state(self.override_state)
self.set_override_state(OverrideState.STUDIO)
def __getitem__(self, key):
return self.non_gui_children[key]

View file

@ -1,6 +1,9 @@
import copy
from .item_entities import ItemEntity
from .lib import NOT_SET
from .lib import (
NOT_SET,
DefaultsNotDefined
)
from .constants import (
OverrideState,
METADATA_KEYS,
@ -169,6 +172,11 @@ class InputEntity(ItemEntity):
def set_override_state(self, state):
self.override_state = state
if (
not self.has_default_value
and state in (OverrideState.STUDIO, OverrideState.PROJECT)
):
raise DefaultsNotDefined(self)
if state is OverrideState.STUDIO:
self.has_studio_override = (
@ -357,6 +365,11 @@ class RawJsonEntity(InputEntity):
def set_override_state(self, state):
self.override_state = state
if (
not self.has_default_value
and state in (OverrideState.STUDIO, OverrideState.PROJECT)
):
raise DefaultsNotDefined(self)
if state is OverrideState.STUDIO:
self.has_studio_override = (
@ -404,6 +417,7 @@ class RawJsonEntity(InputEntity):
return value, metadata
def update_default_value(self, value):
self.has_default_value = value is not NOT_SET
value, metadata = self._prepare_value(value)
self.default_value = value
self.default_metadata = metadata

View file

@ -1,7 +1,10 @@
import copy
from abc import abstractmethod
from .lib import NOT_SET
from .lib import (
NOT_SET,
DefaultsNotDefined
)
from .constants import (
OverrideState,
WRAPPER_TYPES,
@ -319,7 +322,13 @@ class DictImmutableKeysEntity(ItemEntity):
def set_override_state(self, state):
# Change has/had override states
self.override_state = state
if state is OverrideState.STUDIO:
if state is OverrideState.NOT_DEFINED:
pass
elif state is OverrideState.DEFAULTS:
self.has_default_value = self.default_value is not NOT_SET
elif state is OverrideState.STUDIO:
if self.studio_override_metadata is NOT_SET:
self.had_studio_override = False
self.has_studio_override = self.had_studio_override
@ -671,6 +680,12 @@ class DictMutableKeysEntity(ItemEntity):
def set_override_state(self, state):
# TODO change metadata
self.override_state = state
if (
not self.has_default_value
and state in (OverrideState.STUDIO, OverrideState.PROJECT)
):
raise DefaultsNotDefined(self)
using_overrides = True
if (
state is OverrideState.PROJECT
@ -870,6 +885,38 @@ class ListEntity(ItemEntity):
raise NotImplementedError(self.__class__.__name__)
def set_override_state(self, state):
self.override_state = state
if (
not self.has_default_value
and state in (OverrideState.STUDIO, OverrideState.PROJECT)
):
raise DefaultsNotDefined(self)
while self.children:
self.children.pop(0)
if self.override_state is OverrideState.NOT_DEFINED:
return
if self.override_state is OverrideState.PROJECT:
value = self.project_override_value
if value is NOT_SET:
value = self.studio_override_value
if value is NOT_SET:
value = self.default_value
elif self.override_state is OverrideState.STUDIO:
value = self.studio_override_value
if value is NOT_SET:
value = self.default_value
elif self.override_state is OverrideState.DEFAULTS:
value = self.default_value
if value is NOT_SET:
self.has_default_value = False
value = self.value_on_not_set
for child_obj in self.children:
child_obj.set_override_state(state)
@ -1140,6 +1187,8 @@ class ListStrictEntity(ItemEntity):
# GUI attribute
self.is_horizontal = self.schema_data.get("horizontal", True)
if not self.group_item and not self.is_group:
self.is_group = True
def get_child_path(self, child_obj):
result_idx = None
@ -1160,6 +1209,12 @@ class ListStrictEntity(ItemEntity):
def set_override_state(self, state):
# TODO use right value as current_value is held here
self.override_state = state
if (
not self.has_default_value
and state in (OverrideState.STUDIO, OverrideState.PROJECT)
):
raise DefaultsNotDefined(self)
for child_obj in self.children:
child_obj.set_override_state(state)

View file

@ -10,6 +10,12 @@ from .constants import (
from queue import Queue
class DefaultsNotDefined(Exception):
def __init__(self, obj):
msg = "Default values for object are not set. {}".format(obj.path)
super(DefaultsNotDefined, self).__init__(msg)
# Singleton database of available inputs
class TypeToKlass:
types = {}