Skip to content

Commit 3f7ca5d

Browse files
committed
fixing tests
1 parent aad5f86 commit 3f7ca5d

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

linkml_runtime/utils/schemaview.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,36 @@ def permissible_value_parent(self, permissible_value: str, enum_name: ENUM_NAME)
618618
else:
619619
return []
620620

621+
@lru_cache()
622+
def permissible_value_children(self, permissible_value: str, enum_name: ENUM_NAME) -> Union[
623+
str, PermissibleValueText, None, ValueError]:
624+
"""
625+
:param enum_name: parent enum name
626+
:param permissible_value: permissible value
627+
:return: all direct child enum names (is_a)
628+
629+
CAT:
630+
LION:
631+
is_a: CAT
632+
ANGRY_LION:
633+
is_a: LION
634+
BIRD:
635+
EAGLE:
636+
is_a: BIRD
637+
638+
"""
639+
640+
enum = self.get_enum(enum_name, strict=True)
641+
if enum:
642+
if permissible_value in enum.permissible_values:
643+
pv = enum.permissible_values[permissible_value]
644+
for isapv in enum.permissible_values:
645+
isapv_entity = enum.permissible_values[isapv]
646+
if isapv_entity.is_a and pv.text == isapv_entity.is_a:
647+
return [isapv]
648+
else:
649+
return []
650+
621651
@lru_cache()
622652
def slot_parents(self, slot_name: SLOT_NAME, imports=True, mixins=True, is_a=True) -> List[SlotDefinitionName]:
623653
"""
@@ -719,6 +749,22 @@ def permissible_value_ancestors(self, permissible_value_text: str,
719749
reflexive=reflexive,
720750
depth_first=depth_first)
721751

752+
@lru_cache()
753+
def permissible_value_descendants(self, permissible_value_text: str,
754+
enum_name: ENUM_NAME,
755+
reflexive=True,
756+
depth_first=True) -> List[str]:
757+
"""
758+
Closure of permissible_value_children method
759+
:enum
760+
"""
761+
762+
763+
return _closure(lambda x: self.permissible_value_children(x, enum_name),
764+
permissible_value_text,
765+
reflexive=reflexive,
766+
depth_first=depth_first)
767+
722768
@lru_cache()
723769
def enum_ancestors(self, enum_name: ENUM_NAME, imports=True, mixins=True, reflexive=True, is_a=True,
724770
depth_first=True) -> List[EnumDefinitionName]:

tests/test_utils/test_schemaview.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,15 @@ def test_schemaview_enums(self):
5353
if pv == "CAT":
5454
self.assertEqual(view.permissible_value_parent(pv, e.name), None)
5555
self.assertEqual(view.permissible_value_ancestors(pv, e.name), ['CAT'])
56+
self.assertIn("LION", view.permissible_value_descendants(pv, e.name))
57+
self.assertIn("ANGRY_LION", view.permissible_value_descendants(pv, e.name))
58+
self.assertNotIn("EAGLE", view.permissible_value_descendants(pv, e.name))
59+
if pv == "LION":
60+
self.assertIn("ANGRY_LION", view.permissible_value_children(pv, e.name))
5661
if pv == "ANGRY_LION":
5762
self.assertEqual(view.permissible_value_parent(pv, e.name), ['LION'])
5863
self.assertEqual(view.permissible_value_ancestors(pv, e.name), ['ANGRY_LION', 'LION', 'CAT'])
64+
self.assertEquals(["ANGRY_LION"], view.permissible_value_descendants(pv, e.name))
5965
for cn, c in view.all_classes().items():
6066
if c.name == "Adult":
6167
self.assertEqual(view.class_ancestors(c.name), ['Adult', 'Person', 'HasAliases', 'Thing'])

0 commit comments

Comments
 (0)