added method which collects dynamic schema entities

This commit is contained in:
iLLiCiTiT 2021-08-10 12:22:53 +02:00
parent eaa1499510
commit f65dee0a0e
7 changed files with 64 additions and 2 deletions

View file

@ -476,7 +476,15 @@ class BaseItemEntity(BaseEntity):
@abstractmethod
def settings_value(self):
"""Value of an item without key."""
"""Value of an item without key without dynamic items."""
pass
@abstractmethod
def collect_dynamic_schema_entities(self):
"""Collect entities that are on top of dynamically added schemas.
This method make sence only when defaults are saved.
"""
pass
@abstractmethod
@ -905,6 +913,18 @@ class ItemEntity(BaseItemEntity):
def root_key(self):
return self.root_item.root_key
@abstractmethod
def collect_dynamic_schema_entities(self, collector):
"""Collect entities that are on top of dynamically added schemas.
This method make sence only when defaults are saved.
Args:
collector(DynamicSchemaValueCollector): Object where dynamic
entities are stored.
"""
pass
def schema_validations(self):
if not self.label and self.use_label_wrap:
reason = (

View file

@ -455,6 +455,10 @@ class DictConditionalEntity(ItemEntity):
return True
return False
def collect_dynamic_schema_entities(self, collector):
if self.is_dynamic_schema_node:
collector.add_entity(self)
def settings_value(self):
if self._override_state is OverrideState.NOT_DEFINED:
return NOT_SET

View file

@ -318,6 +318,13 @@ class DictImmutableKeysEntity(ItemEntity):
return True
return False
def collect_dynamic_schema_entities(self, collector):
for child_obj in self.non_gui_children.values():
child_obj.collect_dynamic_schema_entities(collector)
if self.is_dynamic_schema_node:
collector.add_entity(self)
def settings_value(self):
if self._override_state is OverrideState.NOT_DEFINED:
return NOT_SET

View file

@ -49,6 +49,10 @@ class EndpointEntity(ItemEntity):
super(EndpointEntity, self).schema_validations()
def collect_dynamic_schema_entities(self, collector):
if self.is_dynamic_schema_node:
collector.add_entity(self)
@abstractmethod
def _settings_value(self):
pass

View file

@ -112,6 +112,9 @@ class PathEntity(ItemEntity):
def set(self, value):
self.child_obj.set(value)
def collect_dynamic_schema_entities(self, *args, **kwargs):
self.child_obj.collect_dynamic_schema_entities(*args, **kwargs)
def settings_value(self):
if self._override_state is OverrideState.NOT_DEFINED:
return NOT_SET
@ -251,6 +254,10 @@ class ListStrictEntity(ItemEntity):
for idx, item in enumerate(new_value):
self.children[idx].set(item)
def collect_dynamic_schema_entities(self, collector):
if self.is_dynamic_schema_node:
collector.add_entity(self)
def settings_value(self):
if self._override_state is OverrideState.NOT_DEFINED:
return NOT_SET

View file

@ -663,3 +663,12 @@ class SchemasHub:
if found_idx is not None:
metadata_item = template_def.pop(found_idx)
return metadata_item
class DynamicSchemaValueCollector:
def __init__(self, schema_hub):
self._schema_hub = schema_hub
self._dynamic_entities = []
def add_entity(self, entity):
self._dynamic_entities.append(entity)

View file

@ -12,7 +12,8 @@ from .lib import (
SCHEMA_KEY_SYSTEM_SETTINGS,
SCHEMA_KEY_PROJECT_SETTINGS,
OverrideState,
SchemasHub
SchemasHub,
DynamicSchemaValueCollector
)
from .exceptions import (
SchemaError,
@ -259,6 +260,16 @@ class RootEntity(BaseItemEntity):
output[key] = child_obj.value
return output
def collect_dynamic_schema_entities(self):
output = DynamicSchemaValueCollector(self.schema_hub)
if self._override_state is not OverrideState.DEFAULTS:
return output
for child_obj in self.non_gui_children.values():
child_obj.collect_dynamic_schema_entities(output)
return output
def settings_value(self):
"""Value for current override state with metadata.