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