|  | 
| 4 | 4 | from copy import copy | 
| 5 | 5 | from typing import List | 
| 6 | 6 | 
 | 
| 7 |  | -from linkml_runtime.linkml_model.meta import SchemaDefinition, ClassDefinition, SlotDefinitionName, SlotDefinition | 
|  | 7 | +from linkml_runtime.linkml_model.meta import SchemaDefinition, ClassDefinition, SlotDefinitionName, SlotDefinition, \ | 
|  | 8 | +    ClassDefinitionName | 
| 8 | 9 | from linkml_runtime.loaders.yaml_loader import YAMLLoader | 
| 9 | 10 | from linkml_runtime.utils.introspection import package_schemaview, object_class_definition | 
| 10 | 11 | from linkml_runtime.utils.schemaview import SchemaView, SchemaUsage, OrderedBy | 
| @@ -61,26 +62,29 @@ def test_schemaview(self): | 
| 61 | 62 |         category_mapping = view.get_element_by_mapping("GO:0005198") | 
| 62 | 63 |         assert category_mapping == ['activity'] | 
| 63 | 64 | 
 | 
| 64 |  | -        if True: | 
| 65 |  | -            for sn, s in view.all_slots().items(): | 
| 66 |  | -                logging.info(f'SN = {sn} RANGE={s.range}') | 
| 67 |  | -            # this section is mostly for debugging | 
| 68 |  | -            for cn in all_cls.keys(): | 
| 69 |  | -                logging.debug(f'{cn} FROM SCHEMA = {view.get_class(cn).from_schema}') | 
| 70 |  | -                logging.debug(f'{cn} PARENTS = {view.class_parents(cn)}') | 
| 71 |  | -                logging.debug(f'{cn} ANCS = {view.class_ancestors(cn)}') | 
| 72 |  | -                logging.debug(f'{cn} CHILDREN = {view.class_children(cn)}') | 
| 73 |  | -                logging.debug(f'{cn} DESCS = {view.class_descendants(cn)}') | 
| 74 |  | -                logging.debug(f'{cn} SCHEMA = {view.in_schema(cn)}') | 
| 75 |  | -                logging.debug(f'  SLOTS = {view.class_slots(cn)}') | 
| 76 |  | -                for sn in view.class_slots(cn): | 
| 77 |  | -                    slot = view.get_slot(sn) | 
| 78 |  | -                    if slot is None: | 
| 79 |  | -                        logging.debug(f'NO SLOT: {sn}') | 
| 80 |  | -                    else: | 
| 81 |  | -                        logging.debug(f'  SLOT {sn} R: {slot.range} U: {view.get_uri(sn)} ANCS: {view.slot_ancestors(sn)}') | 
| 82 |  | -                    induced_slot = view.induced_slot(sn, cn) | 
| 83 |  | -                    logging.debug(f'    INDUCED {sn}={induced_slot}') | 
|  | 65 | +        for tn, t in view.all_types().items(): | 
|  | 66 | +            logging.info(f'TN = {tn}') | 
|  | 67 | +            print(f'{tn} {t.from_schema}') | 
|  | 68 | +            self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', t.from_schema) | 
|  | 69 | +        for sn, s in view.all_slots().items(): | 
|  | 70 | +            logging.info(f'SN = {sn} RANGE={s.range}') | 
|  | 71 | +            self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', s.from_schema) | 
|  | 72 | +        # this section is mostly for debugging | 
|  | 73 | +        for cn in all_cls.keys(): | 
|  | 74 | +            c = view.get_class(cn) | 
|  | 75 | +            self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', c.from_schema) | 
|  | 76 | +            logging.debug(f'{cn} PARENTS = {view.class_parents(cn)}') | 
|  | 77 | +            logging.debug(f'{cn} ANCS = {view.class_ancestors(cn)}') | 
|  | 78 | +            logging.debug(f'{cn} CHILDREN = {view.class_children(cn)}') | 
|  | 79 | +            logging.debug(f'{cn} DESCS = {view.class_descendants(cn)}') | 
|  | 80 | +            logging.debug(f'{cn} SCHEMA = {view.in_schema(cn)}') | 
|  | 81 | +            logging.debug(f'  SLOTS = {view.class_slots(cn)}') | 
|  | 82 | +            for sn in view.class_slots(cn): | 
|  | 83 | +                slot = view.get_slot(sn) | 
|  | 84 | +                self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', slot.from_schema) | 
|  | 85 | +                logging.debug(f'  SLOT {sn} R: {slot.range} U: {view.get_uri(sn)} ANCS: {view.slot_ancestors(sn)}') | 
|  | 86 | +                induced_slot = view.induced_slot(sn, cn) | 
|  | 87 | +                logging.debug(f'    INDUCED {sn}={induced_slot}') | 
| 84 | 88 | 
 | 
| 85 | 89 |         logging.debug(f'ALL = {view.all_elements().keys()}') | 
| 86 | 90 | 
 | 
| @@ -305,13 +309,50 @@ def test_imports(self): | 
| 305 | 309 |         self.assertCountEqual(['kitchen_sink', 'core', 'linkml:types'], view.imports_closure()) | 
| 306 | 310 |         for t in view.all_types().keys(): | 
| 307 | 311 |             logging.debug(f'T={t} in={view.in_schema(t)}') | 
| 308 |  | -        assert view.in_schema('Person') == 'kitchen_sink' | 
| 309 |  | -        assert view.in_schema('id') == 'core' | 
| 310 |  | -        assert view.in_schema('name') == 'core' | 
| 311 |  | -        assert view.in_schema('activity') == 'core' | 
| 312 |  | -        assert view.in_schema('string') == 'types' | 
|  | 312 | +        assert view.in_schema(ClassDefinitionName('Person')) == 'kitchen_sink' | 
|  | 313 | +        assert view.in_schema(SlotDefinitionName('id')) == 'core' | 
|  | 314 | +        assert view.in_schema(SlotDefinitionName('name')) == 'core' | 
|  | 315 | +        assert view.in_schema(SlotDefinitionName('activity')) == 'core' | 
|  | 316 | +        assert view.in_schema(SlotDefinitionName('string')) == 'types' | 
| 313 | 317 |         assert 'activity' in view.all_classes() | 
| 314 | 318 |         assert 'activity' not in view.all_classes(imports=False) | 
|  | 319 | +        assert 'string' in view.all_types() | 
|  | 320 | +        assert 'string' not in view.all_types(imports=False) | 
|  | 321 | + | 
|  | 322 | +        for tn, t in view.all_types().items(): | 
|  | 323 | +            self.assertEqual(tn, t.name) | 
|  | 324 | +            if t in view.all_types(imports=False).values(): | 
|  | 325 | +                self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', t.from_schema) | 
|  | 326 | +            else: | 
|  | 327 | +                self.assertIn(t.from_schema, ['https://w3id.org/linkml/tests/core', 'https://w3id.org/linkml/types']) | 
|  | 328 | +        for en, e in view.all_enums().items(): | 
|  | 329 | +            self.assertEqual(en, e.name) | 
|  | 330 | +            print(f'{en}: {e.from_schema}') | 
|  | 331 | +            if e in view.all_enums(imports=False).values(): | 
|  | 332 | +                self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', e.from_schema) | 
|  | 333 | +            else: | 
|  | 334 | +                self.assertEqual('https://w3id.org/linkml/tests/core', e.from_schema) | 
|  | 335 | +        for sn, s in view.all_slots().items(): | 
|  | 336 | +            self.assertEqual(sn, s.name) | 
|  | 337 | +            #self.assertIsNotNone(s.slot_uri) | 
|  | 338 | +            if s in view.all_slots(imports=False).values(): | 
|  | 339 | +                self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', s.from_schema) | 
|  | 340 | +            else: | 
|  | 341 | +                self.assertEqual('https://w3id.org/linkml/tests/core', s.from_schema) | 
|  | 342 | +        for cn, c in view.all_classes().items(): | 
|  | 343 | +            self.assertEqual(cn, c.name) | 
|  | 344 | +            #self.assertIsNotNone(c.class_uri) | 
|  | 345 | +            if c in view.all_classes(imports=False).values(): | 
|  | 346 | +                self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', c.from_schema) | 
|  | 347 | +            else: | 
|  | 348 | +                self.assertEqual('https://w3id.org/linkml/tests/core', c.from_schema) | 
|  | 349 | +            for s in view.class_induced_slots(cn): | 
|  | 350 | +                if s in view.all_classes(imports=False).values(): | 
|  | 351 | +                    self.assertIsNotNone(s.slot_uri) | 
|  | 352 | +                    self.assertEqual('https://w3id.org/linkml/tests/kitchen_sink', s.from_schema) | 
|  | 353 | +                #else: | 
|  | 354 | +                #    self.assertEqual('https://w3id.org/linkml/tests/core', s.from_schema) | 
|  | 355 | + | 
| 315 | 356 | 
 | 
| 316 | 357 |         for c in ['Company', 'Person', 'Organization', 'Thing']: | 
| 317 | 358 |             assert view.induced_slot('id', c).identifier is True | 
|  | 
0 commit comments