mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
Merge pull request #2956 from pypeclub/bugfix/conditional_dict_invalid_logs
Settings: Conditional dictionary avoid invalid logs
This commit is contained in:
commit
50550c5550
7 changed files with 266 additions and 127 deletions
|
|
@ -173,6 +173,10 @@ class BaseItemEntity(BaseEntity):
|
|||
# Entity has set `_project_override_value` (is not NOT_SET)
|
||||
self.had_project_override = False
|
||||
|
||||
self._default_log_invalid_types = True
|
||||
self._studio_log_invalid_types = True
|
||||
self._project_log_invalid_types = True
|
||||
|
||||
# Callbacks that are called on change.
|
||||
# - main current purspose is to register GUI callbacks
|
||||
self.on_change_callbacks = []
|
||||
|
|
@ -419,7 +423,7 @@ class BaseItemEntity(BaseEntity):
|
|||
raise InvalidValueType(self.valid_value_types, type(value), self.path)
|
||||
|
||||
# TODO convert to private method
|
||||
def _check_update_value(self, value, value_source):
|
||||
def _check_update_value(self, value, value_source, log_invalid_types=True):
|
||||
"""Validation of value on update methods.
|
||||
|
||||
Update methods update data from currently saved settings so it is
|
||||
|
|
@ -447,16 +451,17 @@ class BaseItemEntity(BaseEntity):
|
|||
if new_value is not NOT_SET:
|
||||
return new_value
|
||||
|
||||
# Warning log about invalid value type.
|
||||
self.log.warning(
|
||||
(
|
||||
"{} Got invalid value type for {} values."
|
||||
" Expected types: {} | Got Type: {} | Value: \"{}\""
|
||||
).format(
|
||||
self.path, value_source,
|
||||
self.valid_value_types, type(value), str(value)
|
||||
if log_invalid_types:
|
||||
# Warning log about invalid value type.
|
||||
self.log.warning(
|
||||
(
|
||||
"{} Got invalid value type for {} values."
|
||||
" Expected types: {} | Got Type: {} | Value: \"{}\""
|
||||
).format(
|
||||
self.path, value_source,
|
||||
self.valid_value_types, type(value), str(value)
|
||||
)
|
||||
)
|
||||
)
|
||||
return NOT_SET
|
||||
|
||||
def available_for_role(self, role_name=None):
|
||||
|
|
@ -985,7 +990,7 @@ class ItemEntity(BaseItemEntity):
|
|||
return self.root_item.get_entity_from_path(path)
|
||||
|
||||
@abstractmethod
|
||||
def update_default_value(self, parent_values):
|
||||
def update_default_value(self, parent_values, log_invalid_types=True):
|
||||
"""Fill default values on startup or on refresh.
|
||||
|
||||
Default values stored in `openpype` repository should update all items
|
||||
|
|
@ -995,11 +1000,13 @@ class ItemEntity(BaseItemEntity):
|
|||
Args:
|
||||
parent_values (dict): Values of parent's item. But in case item is
|
||||
used as widget, `parent_values` contain value for item.
|
||||
log_invalid_types (bool): Log invalid type of value. Used when
|
||||
entity can have children with same keys and different types.
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def update_studio_value(self, parent_values):
|
||||
def update_studio_value(self, parent_values, log_invalid_types=True):
|
||||
"""Fill studio override values on startup or on refresh.
|
||||
|
||||
Set studio value if is not set to NOT_SET, in that case studio
|
||||
|
|
@ -1008,11 +1015,13 @@ class ItemEntity(BaseItemEntity):
|
|||
Args:
|
||||
parent_values (dict): Values of parent's item. But in case item is
|
||||
used as widget, `parent_values` contain value for item.
|
||||
log_invalid_types (bool): Log invalid type of value. Used when
|
||||
entity can have children with same keys and different types.
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def update_project_value(self, parent_values):
|
||||
def update_project_value(self, parent_values, log_invalid_types=True):
|
||||
"""Fill project override values on startup, refresh or project change.
|
||||
|
||||
Set project value if is not set to NOT_SET, in that case project
|
||||
|
|
@ -1021,5 +1030,7 @@ class ItemEntity(BaseItemEntity):
|
|||
Args:
|
||||
parent_values (dict): Values of parent's item. But in case item is
|
||||
used as widget, `parent_values` contain value for item.
|
||||
log_invalid_types (bool): Log invalid type of value. Used when
|
||||
entity can have children with same keys and different types.
|
||||
"""
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -518,12 +518,18 @@ class DictConditionalEntity(ItemEntity):
|
|||
output.update(self._current_metadata)
|
||||
return output
|
||||
|
||||
def _prepare_value(self, value):
|
||||
def _prepare_value(self, value, log_invalid_types):
|
||||
if value is NOT_SET or self.enum_key not in value:
|
||||
return NOT_SET, NOT_SET
|
||||
|
||||
enum_value = value.get(self.enum_key)
|
||||
if enum_value not in self.non_gui_children:
|
||||
if log_invalid_types:
|
||||
self.log.warning(
|
||||
"{} Unknown enum key in default values: {}".format(
|
||||
self.path, enum_value
|
||||
)
|
||||
)
|
||||
return NOT_SET, NOT_SET
|
||||
|
||||
# Create copy of value before poping values
|
||||
|
|
@ -551,22 +557,25 @@ class DictConditionalEntity(ItemEntity):
|
|||
|
||||
return value, metadata
|
||||
|
||||
def update_default_value(self, value):
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
"""Update default values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "default")
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "default", log_invalid_types
|
||||
)
|
||||
self.has_default_value = value is not NOT_SET
|
||||
# TODO add value validation
|
||||
value, metadata = self._prepare_value(value)
|
||||
value, metadata = self._prepare_value(value, log_invalid_types)
|
||||
self._default_metadata = metadata
|
||||
|
||||
if value is NOT_SET:
|
||||
self.enum_entity.update_default_value(value)
|
||||
self.enum_entity.update_default_value(value, log_invalid_types)
|
||||
for children_by_key in self.non_gui_children.values():
|
||||
for child_obj in children_by_key.values():
|
||||
child_obj.update_default_value(value)
|
||||
child_obj.update_default_value(value, log_invalid_types)
|
||||
return
|
||||
|
||||
value_keys = set(value.keys())
|
||||
|
|
@ -574,7 +583,7 @@ class DictConditionalEntity(ItemEntity):
|
|||
expected_keys = set(self.non_gui_children[enum_value].keys())
|
||||
expected_keys.add(self.enum_key)
|
||||
unknown_keys = value_keys - expected_keys
|
||||
if unknown_keys:
|
||||
if unknown_keys and log_invalid_types:
|
||||
self.log.warning(
|
||||
"{} Unknown keys in default values: {}".format(
|
||||
self.path,
|
||||
|
|
@ -582,28 +591,37 @@ class DictConditionalEntity(ItemEntity):
|
|||
)
|
||||
)
|
||||
|
||||
self.enum_entity.update_default_value(enum_value)
|
||||
for children_by_key in self.non_gui_children.values():
|
||||
self.enum_entity.update_default_value(enum_value, log_invalid_types)
|
||||
|
||||
for enum_key, children_by_key in self.non_gui_children.items():
|
||||
_log_invalid_types = log_invalid_types
|
||||
if _log_invalid_types:
|
||||
_log_invalid_types = enum_key == enum_value
|
||||
|
||||
value_copy = copy.deepcopy(value)
|
||||
for key, child_obj in children_by_key.items():
|
||||
child_value = value_copy.get(key, NOT_SET)
|
||||
child_obj.update_default_value(child_value)
|
||||
child_obj.update_default_value(child_value, _log_invalid_types)
|
||||
|
||||
def update_studio_value(self, value):
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
"""Update studio override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "studio override")
|
||||
value, metadata = self._prepare_value(value)
|
||||
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
value, metadata = self._prepare_value(value, log_invalid_types)
|
||||
self._studio_override_metadata = metadata
|
||||
self.had_studio_override = metadata is not NOT_SET
|
||||
|
||||
if value is NOT_SET:
|
||||
self.enum_entity.update_studio_value(value)
|
||||
self.enum_entity.update_studio_value(value, log_invalid_types)
|
||||
for children_by_key in self.non_gui_children.values():
|
||||
for child_obj in children_by_key.values():
|
||||
child_obj.update_studio_value(value)
|
||||
child_obj.update_studio_value(value, log_invalid_types)
|
||||
return
|
||||
|
||||
value_keys = set(value.keys())
|
||||
|
|
@ -611,7 +629,7 @@ class DictConditionalEntity(ItemEntity):
|
|||
expected_keys = set(self.non_gui_children[enum_value])
|
||||
expected_keys.add(self.enum_key)
|
||||
unknown_keys = value_keys - expected_keys
|
||||
if unknown_keys:
|
||||
if unknown_keys and log_invalid_types:
|
||||
self.log.warning(
|
||||
"{} Unknown keys in studio overrides: {}".format(
|
||||
self.path,
|
||||
|
|
@ -619,28 +637,36 @@ class DictConditionalEntity(ItemEntity):
|
|||
)
|
||||
)
|
||||
|
||||
self.enum_entity.update_studio_value(enum_value)
|
||||
for children_by_key in self.non_gui_children.values():
|
||||
self.enum_entity.update_studio_value(enum_value, log_invalid_types)
|
||||
for enum_key, children_by_key in self.non_gui_children.items():
|
||||
_log_invalid_types = log_invalid_types
|
||||
if _log_invalid_types:
|
||||
_log_invalid_types = enum_key == enum_value
|
||||
|
||||
value_copy = copy.deepcopy(value)
|
||||
for key, child_obj in children_by_key.items():
|
||||
child_value = value_copy.get(key, NOT_SET)
|
||||
child_obj.update_studio_value(child_value)
|
||||
child_obj.update_studio_value(child_value, _log_invalid_types)
|
||||
|
||||
def update_project_value(self, value):
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
"""Update project override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "project override")
|
||||
value, metadata = self._prepare_value(value)
|
||||
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
value, metadata = self._prepare_value(value, log_invalid_types)
|
||||
self._project_override_metadata = metadata
|
||||
self.had_project_override = metadata is not NOT_SET
|
||||
|
||||
if value is NOT_SET:
|
||||
self.enum_entity.update_project_value(value)
|
||||
self.enum_entity.update_project_value(value, log_invalid_types)
|
||||
for children_by_key in self.non_gui_children.values():
|
||||
for child_obj in children_by_key.values():
|
||||
child_obj.update_project_value(value)
|
||||
child_obj.update_project_value(value, log_invalid_types)
|
||||
return
|
||||
|
||||
value_keys = set(value.keys())
|
||||
|
|
@ -648,7 +674,7 @@ class DictConditionalEntity(ItemEntity):
|
|||
expected_keys = set(self.non_gui_children[enum_value])
|
||||
expected_keys.add(self.enum_key)
|
||||
unknown_keys = value_keys - expected_keys
|
||||
if unknown_keys:
|
||||
if unknown_keys and log_invalid_types:
|
||||
self.log.warning(
|
||||
"{} Unknown keys in project overrides: {}".format(
|
||||
self.path,
|
||||
|
|
@ -656,12 +682,16 @@ class DictConditionalEntity(ItemEntity):
|
|||
)
|
||||
)
|
||||
|
||||
self.enum_entity.update_project_value(enum_value)
|
||||
for children_by_key in self.non_gui_children.values():
|
||||
self.enum_entity.update_project_value(enum_value, log_invalid_types)
|
||||
for enum_key, children_by_key in self.non_gui_children.items():
|
||||
_log_invalid_types = log_invalid_types
|
||||
if _log_invalid_types:
|
||||
_log_invalid_types = enum_key == enum_value
|
||||
|
||||
value_copy = copy.deepcopy(value)
|
||||
for key, child_obj in children_by_key.items():
|
||||
child_value = value_copy.get(key, NOT_SET)
|
||||
child_obj.update_project_value(child_value)
|
||||
child_obj.update_project_value(child_value, _log_invalid_types)
|
||||
|
||||
def _discard_changes(self, on_change_trigger):
|
||||
self._ignore_child_changes = True
|
||||
|
|
|
|||
|
|
@ -414,12 +414,16 @@ class DictImmutableKeysEntity(ItemEntity):
|
|||
|
||||
return value, metadata
|
||||
|
||||
def update_default_value(self, value):
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
"""Update default values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "default")
|
||||
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "default", log_invalid_types
|
||||
)
|
||||
self.has_default_value = value is not NOT_SET
|
||||
# TODO add value validation
|
||||
value, metadata = self._prepare_value(value)
|
||||
|
|
@ -427,13 +431,13 @@ class DictImmutableKeysEntity(ItemEntity):
|
|||
|
||||
if value is NOT_SET:
|
||||
for child_obj in self.non_gui_children.values():
|
||||
child_obj.update_default_value(value)
|
||||
child_obj.update_default_value(value, log_invalid_types)
|
||||
return
|
||||
|
||||
value_keys = set(value.keys())
|
||||
expected_keys = set(self.non_gui_children)
|
||||
unknown_keys = value_keys - expected_keys
|
||||
if unknown_keys:
|
||||
if unknown_keys and log_invalid_types:
|
||||
self.log.warning(
|
||||
"{} Unknown keys in default values: {}".format(
|
||||
self.path,
|
||||
|
|
@ -443,27 +447,31 @@ class DictImmutableKeysEntity(ItemEntity):
|
|||
|
||||
for key, child_obj in self.non_gui_children.items():
|
||||
child_value = value.get(key, NOT_SET)
|
||||
child_obj.update_default_value(child_value)
|
||||
child_obj.update_default_value(child_value, log_invalid_types)
|
||||
|
||||
def update_studio_value(self, value):
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
"""Update studio override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "studio override")
|
||||
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
value, metadata = self._prepare_value(value)
|
||||
self._studio_override_metadata = metadata
|
||||
self.had_studio_override = metadata is not NOT_SET
|
||||
|
||||
if value is NOT_SET:
|
||||
for child_obj in self.non_gui_children.values():
|
||||
child_obj.update_studio_value(value)
|
||||
child_obj.update_studio_value(value, log_invalid_types)
|
||||
return
|
||||
|
||||
value_keys = set(value.keys())
|
||||
expected_keys = set(self.non_gui_children)
|
||||
unknown_keys = value_keys - expected_keys
|
||||
if unknown_keys:
|
||||
if unknown_keys and log_invalid_types:
|
||||
self.log.warning(
|
||||
"{} Unknown keys in studio overrides: {}".format(
|
||||
self.path,
|
||||
|
|
@ -472,27 +480,31 @@ class DictImmutableKeysEntity(ItemEntity):
|
|||
)
|
||||
for key, child_obj in self.non_gui_children.items():
|
||||
child_value = value.get(key, NOT_SET)
|
||||
child_obj.update_studio_value(child_value)
|
||||
child_obj.update_studio_value(child_value, log_invalid_types)
|
||||
|
||||
def update_project_value(self, value):
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
"""Update project override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "project override")
|
||||
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
value, metadata = self._prepare_value(value)
|
||||
self._project_override_metadata = metadata
|
||||
self.had_project_override = metadata is not NOT_SET
|
||||
|
||||
if value is NOT_SET:
|
||||
for child_obj in self.non_gui_children.values():
|
||||
child_obj.update_project_value(value)
|
||||
child_obj.update_project_value(value, log_invalid_types)
|
||||
return
|
||||
|
||||
value_keys = set(value.keys())
|
||||
expected_keys = set(self.non_gui_children)
|
||||
unknown_keys = value_keys - expected_keys
|
||||
if unknown_keys:
|
||||
if unknown_keys and log_invalid_types:
|
||||
self.log.warning(
|
||||
"{} Unknown keys in project overrides: {}".format(
|
||||
self.path,
|
||||
|
|
@ -502,7 +514,7 @@ class DictImmutableKeysEntity(ItemEntity):
|
|||
|
||||
for key, child_obj in self.non_gui_children.items():
|
||||
child_value = value.get(key, NOT_SET)
|
||||
child_obj.update_project_value(child_value)
|
||||
child_obj.update_project_value(child_value, log_invalid_types)
|
||||
|
||||
def _discard_changes(self, on_change_trigger):
|
||||
self._ignore_child_changes = True
|
||||
|
|
@ -694,37 +706,48 @@ class RootsDictEntity(DictImmutableKeysEntity):
|
|||
self._metadata_are_modified = False
|
||||
self._current_metadata = {}
|
||||
|
||||
def update_default_value(self, value):
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
"""Update default values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "default")
|
||||
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "default", log_invalid_types
|
||||
)
|
||||
value, _ = self._prepare_value(value)
|
||||
|
||||
self._default_value = value
|
||||
self._default_metadata = {}
|
||||
self.has_default_value = value is not NOT_SET
|
||||
|
||||
def update_studio_value(self, value):
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
"""Update studio override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "studio override")
|
||||
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
value, _ = self._prepare_value(value)
|
||||
|
||||
self._studio_value = value
|
||||
self._studio_override_metadata = {}
|
||||
self.had_studio_override = value is not NOT_SET
|
||||
|
||||
def update_project_value(self, value):
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
"""Update project override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
|
||||
value = self._check_update_value(value, "project override")
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
value, _metadata = self._prepare_value(value)
|
||||
|
||||
self._project_value = value
|
||||
|
|
@ -886,37 +909,48 @@ class SyncServerSites(DictImmutableKeysEntity):
|
|||
self._metadata_are_modified = False
|
||||
self._current_metadata = {}
|
||||
|
||||
def update_default_value(self, value):
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
"""Update default values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "default")
|
||||
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "default", log_invalid_types
|
||||
)
|
||||
value, _ = self._prepare_value(value)
|
||||
|
||||
self._default_value = value
|
||||
self._default_metadata = {}
|
||||
self.has_default_value = value is not NOT_SET
|
||||
|
||||
def update_studio_value(self, value):
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
"""Update studio override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
value = self._check_update_value(value, "studio override")
|
||||
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
value, _ = self._prepare_value(value)
|
||||
|
||||
self._studio_value = value
|
||||
self._studio_override_metadata = {}
|
||||
self.had_studio_override = value is not NOT_SET
|
||||
|
||||
def update_project_value(self, value):
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
"""Update project override values.
|
||||
|
||||
Not an api method, should be called by parent.
|
||||
"""
|
||||
|
||||
value = self._check_update_value(value, "project override")
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
value, _metadata = self._prepare_value(value)
|
||||
|
||||
self._project_value = value
|
||||
|
|
|
|||
|
|
@ -393,11 +393,15 @@ class DictMutableKeysEntity(EndpointEntity):
|
|||
value = self.value_on_not_set
|
||||
|
||||
using_values_from_state = False
|
||||
log_invalid_types = True
|
||||
if state is OverrideState.PROJECT:
|
||||
log_invalid_types = self._project_log_invalid_types
|
||||
using_values_from_state = using_project_overrides
|
||||
elif state is OverrideState.STUDIO:
|
||||
log_invalid_types = self._studio_log_invalid_types
|
||||
using_values_from_state = using_studio_overrides
|
||||
elif state is OverrideState.DEFAULTS:
|
||||
log_invalid_types = self._default_log_invalid_types
|
||||
using_values_from_state = using_default_values
|
||||
|
||||
new_value = copy.deepcopy(value)
|
||||
|
|
@ -437,11 +441,11 @@ class DictMutableKeysEntity(EndpointEntity):
|
|||
if not label:
|
||||
label = metadata_labels.get(new_key)
|
||||
|
||||
child_entity.update_default_value(_value)
|
||||
child_entity.update_default_value(_value, log_invalid_types)
|
||||
if using_project_overrides:
|
||||
child_entity.update_project_value(_value)
|
||||
child_entity.update_project_value(_value, log_invalid_types)
|
||||
elif using_studio_overrides:
|
||||
child_entity.update_studio_value(_value)
|
||||
child_entity.update_studio_value(_value, log_invalid_types)
|
||||
|
||||
if label:
|
||||
children_label_by_id[child_entity.id] = label
|
||||
|
|
@ -598,8 +602,11 @@ class DictMutableKeysEntity(EndpointEntity):
|
|||
metadata[key] = value.pop(key)
|
||||
return value, metadata
|
||||
|
||||
def update_default_value(self, value):
|
||||
value = self._check_update_value(value, "default")
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "default", log_invalid_types
|
||||
)
|
||||
has_default_value = value is not NOT_SET
|
||||
if has_default_value:
|
||||
for required_key in self.required_keys:
|
||||
|
|
@ -611,15 +618,21 @@ class DictMutableKeysEntity(EndpointEntity):
|
|||
self._default_value = value
|
||||
self._default_metadata = metadata
|
||||
|
||||
def update_studio_value(self, value):
|
||||
value = self._check_update_value(value, "studio override")
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
value, metadata = self._prepare_value(value)
|
||||
self._studio_override_value = value
|
||||
self._studio_override_metadata = metadata
|
||||
self.had_studio_override = value is not NOT_SET
|
||||
|
||||
def update_project_value(self, value):
|
||||
value = self._check_update_value(value, "project override")
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
value, metadata = self._prepare_value(value)
|
||||
self._project_override_value = value
|
||||
self._project_override_metadata = metadata
|
||||
|
|
@ -686,9 +699,12 @@ class DictMutableKeysEntity(EndpointEntity):
|
|||
if not self._can_remove_from_project_override:
|
||||
return
|
||||
|
||||
log_invalid_types = True
|
||||
if self._has_studio_override:
|
||||
log_invalid_types = self._studio_log_invalid_types
|
||||
value = self._studio_override_value
|
||||
elif self.has_default_value:
|
||||
log_invalid_types = self._default_log_invalid_types
|
||||
value = self._default_value
|
||||
else:
|
||||
value = self.value_on_not_set
|
||||
|
|
@ -709,9 +725,9 @@ class DictMutableKeysEntity(EndpointEntity):
|
|||
for _key, _value in new_value.items():
|
||||
new_key = self._convert_to_regex_valid_key(_key)
|
||||
child_entity = self._add_key(new_key)
|
||||
child_entity.update_default_value(_value)
|
||||
child_entity.update_default_value(_value, log_invalid_types)
|
||||
if self._has_studio_override:
|
||||
child_entity.update_studio_value(_value)
|
||||
child_entity.update_studio_value(_value, log_invalid_types)
|
||||
|
||||
label = metadata_labels.get(_key)
|
||||
if label:
|
||||
|
|
|
|||
|
|
@ -90,18 +90,27 @@ class EndpointEntity(ItemEntity):
|
|||
def require_restart(self):
|
||||
return self.has_unsaved_changes
|
||||
|
||||
def update_default_value(self, value):
|
||||
value = self._check_update_value(value, "default")
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "default", log_invalid_types
|
||||
)
|
||||
self._default_value = value
|
||||
self.has_default_value = value is not NOT_SET
|
||||
|
||||
def update_studio_value(self, value):
|
||||
value = self._check_update_value(value, "studio override")
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
self._studio_override_value = value
|
||||
self.had_studio_override = bool(value is not NOT_SET)
|
||||
|
||||
def update_project_value(self, value):
|
||||
value = self._check_update_value(value, "project override")
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
self._project_override_value = value
|
||||
self.had_project_override = bool(value is not NOT_SET)
|
||||
|
||||
|
|
@ -590,22 +599,26 @@ class RawJsonEntity(InputEntity):
|
|||
metadata[key] = value.pop(key)
|
||||
return value, metadata
|
||||
|
||||
def update_default_value(self, value):
|
||||
value = self._check_update_value(value, "default")
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
value = self._check_update_value(value, "default", log_invalid_types)
|
||||
self.has_default_value = value is not NOT_SET
|
||||
value, metadata = self._prepare_value(value)
|
||||
self._default_value = value
|
||||
self.default_metadata = metadata
|
||||
|
||||
def update_studio_value(self, value):
|
||||
value = self._check_update_value(value, "studio override")
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
self.had_studio_override = value is not NOT_SET
|
||||
value, metadata = self._prepare_value(value)
|
||||
self._studio_override_value = value
|
||||
self.studio_override_metadata = metadata
|
||||
|
||||
def update_project_value(self, value):
|
||||
value = self._check_update_value(value, "project override")
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
self.had_project_override = value is not NOT_SET
|
||||
value, metadata = self._prepare_value(value)
|
||||
self._project_override_value = value
|
||||
|
|
|
|||
|
|
@ -173,14 +173,17 @@ class PathEntity(ItemEntity):
|
|||
self._ignore_missing_defaults = ignore_missing_defaults
|
||||
self.child_obj.set_override_state(state, ignore_missing_defaults)
|
||||
|
||||
def update_default_value(self, value):
|
||||
self.child_obj.update_default_value(value)
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
self.child_obj.update_default_value(value, log_invalid_types)
|
||||
|
||||
def update_project_value(self, value):
|
||||
self.child_obj.update_project_value(value)
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
self.child_obj.update_project_value(value, log_invalid_types)
|
||||
|
||||
def update_studio_value(self, value):
|
||||
self.child_obj.update_studio_value(value)
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
self.child_obj.update_studio_value(value, log_invalid_types)
|
||||
|
||||
def _discard_changes(self, *args, **kwargs):
|
||||
self.child_obj.discard_changes(*args, **kwargs)
|
||||
|
|
@ -472,9 +475,9 @@ class ListStrictEntity(ItemEntity):
|
|||
|
||||
self._has_project_override = False
|
||||
|
||||
def _check_update_value(self, value, value_type):
|
||||
def _check_update_value(self, value, value_type, log_invalid_types=True):
|
||||
value = super(ListStrictEntity, self)._check_update_value(
|
||||
value, value_type
|
||||
value, value_type, log_invalid_types
|
||||
)
|
||||
if value is NOT_SET:
|
||||
return value
|
||||
|
|
@ -484,15 +487,16 @@ class ListStrictEntity(ItemEntity):
|
|||
if value_len == child_len:
|
||||
return value
|
||||
|
||||
self.log.warning(
|
||||
(
|
||||
"{} Amount of strict list items in {} values is"
|
||||
" not same as expected. Expected {} items. Got {} items. {}"
|
||||
).format(
|
||||
self.path, value_type,
|
||||
child_len, value_len, str(value)
|
||||
if log_invalid_types:
|
||||
self.log.warning(
|
||||
(
|
||||
"{} Amount of strict list items in {} values is not same"
|
||||
" as expected. Expected {} items. Got {} items. {}"
|
||||
).format(
|
||||
self.path, value_type,
|
||||
child_len, value_len, str(value)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if value_len < child_len:
|
||||
# Fill missing values with NOT_SET
|
||||
|
|
@ -504,36 +508,51 @@ class ListStrictEntity(ItemEntity):
|
|||
value.pop(child_len)
|
||||
return value
|
||||
|
||||
def update_default_value(self, value):
|
||||
value = self._check_update_value(value, "default")
|
||||
def update_default_value(self, value, log_invalid_types=True):
|
||||
self._default_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "default", log_invalid_types
|
||||
)
|
||||
self.has_default_value = value is not NOT_SET
|
||||
if value is NOT_SET:
|
||||
for child_obj in self.children:
|
||||
child_obj.update_default_value(value)
|
||||
child_obj.update_default_value(value, log_invalid_types)
|
||||
|
||||
else:
|
||||
for idx, item_value in enumerate(value):
|
||||
self.children[idx].update_default_value(item_value)
|
||||
self.children[idx].update_default_value(
|
||||
item_value, log_invalid_types
|
||||
)
|
||||
|
||||
def update_studio_value(self, value):
|
||||
value = self._check_update_value(value, "studio override")
|
||||
def update_studio_value(self, value, log_invalid_types=True):
|
||||
self._studio_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "studio override", log_invalid_types
|
||||
)
|
||||
if value is NOT_SET:
|
||||
for child_obj in self.children:
|
||||
child_obj.update_studio_value(value)
|
||||
child_obj.update_studio_value(value, log_invalid_types)
|
||||
|
||||
else:
|
||||
for idx, item_value in enumerate(value):
|
||||
self.children[idx].update_studio_value(item_value)
|
||||
self.children[idx].update_studio_value(
|
||||
item_value, log_invalid_types
|
||||
)
|
||||
|
||||
def update_project_value(self, value):
|
||||
value = self._check_update_value(value, "project override")
|
||||
def update_project_value(self, value, log_invalid_types=True):
|
||||
self._project_log_invalid_types = log_invalid_types
|
||||
value = self._check_update_value(
|
||||
value, "project override", log_invalid_types
|
||||
)
|
||||
if value is NOT_SET:
|
||||
for child_obj in self.children:
|
||||
child_obj.update_project_value(value)
|
||||
child_obj.update_project_value(value, log_invalid_types)
|
||||
|
||||
else:
|
||||
for idx, item_value in enumerate(value):
|
||||
self.children[idx].update_project_value(item_value)
|
||||
self.children[idx].update_project_value(
|
||||
item_value, log_invalid_types
|
||||
)
|
||||
|
||||
def reset_callbacks(self):
|
||||
super(ListStrictEntity, self).reset_callbacks()
|
||||
|
|
|
|||
|
|
@ -325,16 +325,24 @@ class ListEntity(EndpointEntity):
|
|||
|
||||
for item in value:
|
||||
child_obj = self._add_new_item()
|
||||
child_obj.update_default_value(item)
|
||||
child_obj.update_default_value(
|
||||
item, self._default_log_invalid_types
|
||||
)
|
||||
if self._override_state is OverrideState.PROJECT:
|
||||
if self.had_project_override:
|
||||
child_obj.update_project_value(item)
|
||||
child_obj.update_project_value(
|
||||
item, self._project_log_invalid_types
|
||||
)
|
||||
elif self.had_studio_override:
|
||||
child_obj.update_studio_value(item)
|
||||
child_obj.update_studio_value(
|
||||
item, self._studio_log_invalid_types
|
||||
)
|
||||
|
||||
elif self._override_state is OverrideState.STUDIO:
|
||||
if self.had_studio_override:
|
||||
child_obj.update_studio_value(item)
|
||||
child_obj.update_studio_value(
|
||||
item, self._studio_log_invalid_types
|
||||
)
|
||||
|
||||
for child_obj in self.children:
|
||||
child_obj.set_override_state(
|
||||
|
|
@ -466,16 +474,24 @@ class ListEntity(EndpointEntity):
|
|||
|
||||
for item in value:
|
||||
child_obj = self._add_new_item()
|
||||
child_obj.update_default_value(item)
|
||||
child_obj.update_default_value(
|
||||
item, self._default_log_invalid_types
|
||||
)
|
||||
if self._override_state is OverrideState.PROJECT:
|
||||
if self.had_project_override:
|
||||
child_obj.update_project_value(item)
|
||||
child_obj.update_project_value(
|
||||
item, self._project_log_invalid_types
|
||||
)
|
||||
elif self.had_studio_override:
|
||||
child_obj.update_studio_value(item)
|
||||
child_obj.update_studio_value(
|
||||
item, self._studio_log_invalid_types
|
||||
)
|
||||
|
||||
elif self._override_state is OverrideState.STUDIO:
|
||||
if self.had_studio_override:
|
||||
child_obj.update_studio_value(item)
|
||||
child_obj.update_studio_value(
|
||||
item, self._studio_log_invalid_types
|
||||
)
|
||||
|
||||
child_obj.set_override_state(
|
||||
self._override_state, self._ignore_missing_defaults
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue