SectionProxy creates RecursionError
Hey Nomad,
this error just started happening with the newest merge:
ERROR: Traceback (most recent call last):
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3353, in __get__
value = obj.__dict__[self.name]
KeyError: 'all_quantities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3353, in __get__
value = obj.__dict__[self.name]
KeyError: 'unit'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3365, in __get__
if self.cached:
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3542, in __get__
if value is not None and self.unit is not None and self.type in MTypes.num:
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3363, in __get__
if self.derived is not None:
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3514, in __get__
return obj.__dict__[self._name]
RecursionError: maximum recursion depth exceeded while calling a Python object
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/a2853/miniconda3/envs/nomad/lib/python3.9/site-packages/starlette/routing.py", line 671, in lifespan
async with self.lifespan_context(app):
File "/home/a2853/miniconda3/envs/nomad/lib/python3.9/site-packages/starlette/routing.py", line 566, in __aenter__
await self._router.startup()
File "/home/a2853/miniconda3/envs/nomad/lib/python3.9/site-packages/starlette/routing.py", line 648, in startup
await handler()
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/app/main.py", line 164, in startup_event
infrastructure.setup()
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/infrastructure.py", line 72, in setup
setup_elastic()
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/infrastructure.py", line 110, in setup_elastic
create_v1_indices()
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 1038, in create_indices
entry_type.create_mapping(entry_section_def)
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 397, in create_mapping
sub_section_mapping = self.create_mapping(
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 362, in create_mapping
reference_mapping = self.create_mapping(
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 421, in create_mapping
self.reload_quantities_dynamic()
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 473, in reload_quantities_dynamic
for quantity_def, path in get_all_quantities(section):
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 460, in get_all_quantities
for item in get_all_quantities(sub_section_def.sub_section, full_name):
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 460, in get_all_quantities
for item in get_all_quantities(sub_section_def.sub_section, full_name):
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 460, in get_all_quantities
for item in get_all_quantities(sub_section_def.sub_section, full_name):
[Previous line repeated 941 more times]
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/elasticsearch_extension.py", line 454, in get_all_quantities
for quantity_name, quantity in m_def.all_quantities.items():
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3374, in __get__
raise DeriveError(f'Could not derive value for {self}: {str(e)}')
File "/home/a2853/Documents/Projects/nomad/nomad-FAIR/nomad/metainfo/metainfo.py", line 3070, in __repr__
return f'{self.qualified_name()}:{self.m_def.name}'
RecursionError: maximum recursion depth exceeded
ERROR: Application startup failed. Exiting.
It can be created by the following line of code in a plugin. If i put it into nomad/datamodel/metainfo/eln/__init__.py
ther error doesnt occur, only in plugin.
class B(ArchiveSection):
a = SubSection(
section_def=SectionProxy("A"))
class A(CompositeSystem, EntryData):
b = SubSection(section_def=B, repeats=True)
Any ideas?