-
Notifications
You must be signed in to change notification settings - Fork 7
Method .get_fields_types() of annotated model returns AttributeError on Python 3.9 #43
Copy link
Copy link
Open
Description
The following code block from ./docs/Usage_example_HealthRI_core.ipynb returns an AttributeError when run on Python 3.9:
from sempyro.hri_dcat.hri_dataset import HRIDataset
from sempyro.foaf.agent import Agent
from pprint import pprint
core_fields = HRIDataset.annotate_model()
types = core_fields.get_fields_types()
This is due to the fact that this method iterates over the properties in the model and uses the __name__attribute from the type hinting objects to determine their types. Based on this issue, python/cpython#88690, this attribute was not present for all types, therefore resulting in an AttributeError. On Python 3.10 the .get_fields_types() method does work.
The aforementioned AttributeError:
AttributeError Traceback (most recent call last)
Cell In[1], line 6
3 from pprint import pprint
5 core_fields = HRIDataset.annotate_model()
----> 6 types = core_fields.get_fields_types()
7 mandatory_types = {k: types[k] for k in core_fields.mandatory_fields()}
8 pprint(mandatory_types)
File ~/Documents/Projects/SeMPyRO/venv/lib/python3.9/site-packages/sempyro/rdf_model.py:67, in ModelAnnotationUtil.get_fields_types(self)
66 def get_fields_types(self):
---> 67 return {key: {"datatype": self._get_list_types(datatype=value.annotation),
68 "RDF type": value.json_schema_extra.get("rdf_type", "No RDF type specified for the field")} for
69 key, value in self.fields.items()}
File ~/Documents/Projects/SeMPyRO/venv/lib/python3.9/site-packages/sempyro/rdf_model.py:67, in <dictcomp>(.0)
66 def get_fields_types(self):
---> 67 return {key: {"datatype": self._get_list_types(datatype=value.annotation),
68 "RDF type": value.json_schema_extra.get("rdf_type", "No RDF type specified for the field")} for
69 key, value in self.fields.items()}
File ~/Documents/Projects/SeMPyRO/venv/lib/python3.9/site-packages/sempyro/rdf_model.py:77, in ModelAnnotationUtil._get_list_types(self, datatype)
76 def _get_list_types(self, datatype):
---> 77 dt_name = datatype.__name__
78 if dt_name in ["List", "Union"]:
79 types = []
File /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/typing.py:701, in _BaseGenericAlias.__getattr__(self, attr)
699 if '__origin__' in self.__dict__ and not _is_dunder(attr):
700 return getattr(self.__origin__, attr)
--> 701 raise AttributeError(attr)
AttributeError: __name__
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels