Skip to content

Commit 7c2a6ec

Browse files
committed
feat(schemaview): use inlining processor
Use created module to process object inlining. Signed-off-by: Silvano Cirujano Cuesta <silvano.cirujano-cuesta@siemens.com>
1 parent 0722cd8 commit 7c2a6ec

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

linkml_runtime/utils/schemaview.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
TypeDefinition,
4040
TypeDefinitionName,
4141
)
42+
from linkml_runtime.processing import inlining
4243
from linkml_runtime.utils.context_utils import map_import, parse_import_map
4344
from linkml_runtime.utils.formatutils import camelcase, is_empty, sfx, underscore
4445
from linkml_runtime.utils.namespaces import Namespaces
@@ -1474,6 +1475,7 @@ def induced_slot(
14741475
:param imports: include imports closure
14751476
:return: dynamic slot constructed by inference
14761477
"""
1478+
# print(f"inducing {slot_name}")
14771479
if class_name:
14781480
cls = self.get_class(class_name, imports, strict=True)
14791481
else:
@@ -1549,8 +1551,7 @@ def induced_slot(
15491551
v = self.schema.default_range
15501552
if v is not None:
15511553
setattr(induced_slot, metaslot_name, v)
1552-
if slot.inlined_as_list:
1553-
slot.inlined = True
1554+
slot.inlined, slot.inlined_as_list = inlining.process(induced_slot, self.schema_map, logger)
15541555
if slot.identifier or slot.key:
15551556
slot.required = True
15561557
if mangle_name:
@@ -1679,16 +1680,27 @@ def is_inlined(self, slot: SlotDefinition, imports: bool = True) -> bool:
16791680
range = slot.range
16801681
if range in self.all_classes():
16811682
if slot.inlined or slot.inlined_as_list:
1683+
# print(f"is_inlined({slot.name}) -> True")
16821684
return True
16831685

16841686
id_slot = self.get_identifier_slot(range, imports=imports)
16851687
if id_slot is None:
16861688
# must be inlined as has no identifier
1689+
# print(f"is_inlined({slot.name}) -> True")
16871690
return True
16881691
# not explicitly declared inline and has an identifier: assume is ref, not inlined
1692+
# print(f"is_inlined({slot.name}) -> False")
16891693
return False
1694+
# print(f"is_inlined({slot.name}) -> False")
16901695
return False
16911696

1697+
result = inlining.is_inlined(slot, self.schema_map, logger)
1698+
print(f"is_inlined({slot.name}) -> {result}")
1699+
# if slot.name == "a_thing_without_id":
1700+
# result = True
1701+
return result
1702+
return inlining.is_inlined(slot, self.schema_map, logger)
1703+
16921704
def slot_applicable_range_elements(self, slot: SlotDefinition) -> list[ClassDefinitionName]:
16931705
"""Retrieve all applicable metamodel elements for a slot range.
16941706
@@ -2043,13 +2055,7 @@ def materialize_derived_schema(self) -> SchemaDefinition:
20432055
if metaslot_val is not None:
20442056
setattr(slot, metaslot, metaslot_val)
20452057
slot_range_pk_slot_name = None
2046-
if isinstance(slot_range_element, ClassDefinition):
2047-
slot_range_pk_slot_name = self.get_identifier_slot(slot_range_element.name, use_key=True)
2048-
if not slot_range_pk_slot_name:
2049-
slot.inlined = True
2050-
slot.inlined_as_list = True
2051-
if slot.inlined_as_list:
2052-
slot.inlined = True
2058+
slot.inlined, slot.inlined_as_list = inlining.process(slot, self.schema_map, logger)
20532059
if slot.identifier or slot.key:
20542060
slot.required = True
20552061
cls.attributes[slot.name] = slot

0 commit comments

Comments
 (0)