Skip to content
Snippets Groups Projects

jsex / yaml parser

Merged Daniel Hornung requested to merge f-more-jsonschema-export into dev
All threads resolved!
Files
7
@@ -31,7 +31,7 @@ from typing import List
import linkahead as db
import linkahead.common.models as models
from linkahead.apiutils import compare_entities, describe_diff
from linkahead.apiutils import compare_entities, describe_diff, merge_entities
CAOSDB_INTERNAL_PROPERTIES = [
@@ -264,7 +264,7 @@ class DataModel(dict):
return list(all_ents.values())
def get_deep(self, name: str, visited_props: set = None, visited_parents: set = None):
def get_deep(self, name: str, visited_props: dict = None, visited_parents: set = None):
"""Attempt to resolve references for the given ``name``.
The returned entity has all the properties it inherits from its ancestry and all properties
@@ -279,7 +279,7 @@ class DataModel(dict):
if not entity:
return entity
if not visited_props:
visited_props = set()
visited_props = {}
if not visited_parents:
visited_parents = set()
@@ -309,8 +309,14 @@ class DataModel(dict):
for prop in list(entity.get_properties()): # Make a change-resistant list copy.
if prop.name in visited_props:
if visited_props[prop.name]:
deep_prop = visited_props[prop.name]
merge_entities(prop, deep_prop)
prop.datatype = deep_prop.datatype
prop.value = deep_prop.value
prop.unit = deep_prop.unit
continue
visited_props.add(prop.name)
visited_props[prop.name] = None
if prop.name in self:
deep_prop = self.get_deep(prop.name, visited_props=visited_props,
visited_parents=visited_parents)
@@ -322,6 +328,7 @@ class DataModel(dict):
linked_prop.datatype = deep_prop
if deep_prop.description:
linked_prop.description = deep_prop.description
visited_props[prop.name] = deep_prop
else:
print(f"Referenced property \"{prop.name}\" not found in data model.")
Loading