From 47cd33837c4ef28c176cb1ffdabfd120adb0fbe8 Mon Sep 17 00:00:00 2001 From: Amir Golparvar <amir.golparvar@physik.hu-berlin.de> Date: Wed, 18 Sep 2024 09:47:39 +0000 Subject: [PATCH] extra_fields on elabftw fails to be parsed. new schema on elabftw side causes breaking the parser. Changelog: Fixed --- nomad/parsing/elabftw/elabftw.py | 33 +++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/nomad/parsing/elabftw/elabftw.py b/nomad/parsing/elabftw/elabftw.py index 84b4a6f955..c9a9e5ce9e 100644 --- a/nomad/parsing/elabftw/elabftw.py +++ b/nomad/parsing/elabftw/elabftw.py @@ -328,7 +328,13 @@ class ELabFTW(EntryData): project_id = Quantity(type=str, description='Project ID') status = Quantity( type=MEnum( - 'Not set', 'Running', 'Waiting', 'Success', 'Need to be redone', 'Fail' + 'Not set', + 'Running', + 'Waiting', + 'Success', + 'Need to be redone', + 'Fail', + 'Maintenance mode', ), description='Status of the Experiment', ) @@ -585,13 +591,17 @@ def _parse_latest( archive, logger, ) -> ELabFTW: - latest_elab_instance = ELabFTW( - author=raw_experiment.get('author').get('id'), - title=raw_experiment.get('name', None), - keywords=raw_experiment.get('keywords', '').split(','), - id=raw_experiment.get('id', ''), - status=raw_experiment.get('creative_work_status', 'Not set'), - ) + try: + latest_elab_instance = ELabFTW( + author=raw_experiment.get('author').get('id'), + title=raw_experiment.get('name', None), + keywords=raw_experiment.get('keywords', '').split(','), + id=raw_experiment.get('id', ''), + status=raw_experiment.get('creative_work_status', 'Not set'), + ) + except Exception: + logger.error('Failed to parse the eln file.') + raise ELabFTWParserError() _ = _set_experiment_metadata( raw_experiment, exp_archive, latest_elab_instance, logger @@ -600,9 +610,10 @@ def _parse_latest( body=raw_experiment.get('text', None), created_at=raw_experiment.get('date_created', None), extra_fields={ - i: value - for i, value in enumerate(raw_experiment.get('variable_measured', [])) - }, + i: value for i, value in enumerate(raw_experiment['variable_measured']) + } + if raw_experiment.get('variable_measured') is not None + else None, ) data_section.steps.extend( [ -- GitLab