simphony / simphony-osp

A framework that aims to achieve interoperability between software such as simulation engines, databases and data repositories using a knowledge graph as the common language.
https://simphony.readthedocs.io
Other
16 stars 12 forks source link

`Pretty_print ` does not work for non 'namespce'd entities #854

Open adhamhashibon opened 1 year ago

adhamhashibon commented 1 year ago

seems like pretty_print expects a that all superclasses of a class belong to a loaded name space. If for example we load the FOAF namespace and ontology, which uses internally geo, geo is not loaded as a name space, the superclass of a Person is a geo:SpatialThing. Using pretty_print on a Person instance fails:

a_person=foaf.Person()
pretty_print(a_person)

fails with AttributeError: 'NoneType' object has no attribute 'name' at end of a longish message.

adhamhashibon commented 1 year ago

Possible solution:

enhance the generator in _pp_list_of_labels_or_uids to take into account non name spaced entities. Currently this is checked for the root entity assuming all other superclasses belong to the name space.

--> We can add an if else inside the generator like so:

labels = ( f"{entity.label} ({entity.namespace.name} )" if entity.namespace else f"{entity.label}" for entity in entities )

and essentially reduce the lines needed, and get the proper result:

- Ontology individual:
  identifier: d77a2f2e-e460-4b11-919a-15f7fc8f943c
  type: Person (foaf )
  superclasses: Person (foaf ), Spatial Thing, Agent (foaf ), Thing (owl )

will integrate this probably with the fix to issue #853 as it also requires a fix to the pretty_print.