From 5ed953fb899efd97478d8e75b07f6edd20a4cc96 Mon Sep 17 00:00:00 2001
From: Theodore Chang <theodore.chang@physik.hu-berlin.de>
Date: Wed, 16 Oct 2024 18:46:30 +0000
Subject: [PATCH] Ensure deserialization order

---
 nomad/metainfo/metainfo.py | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/nomad/metainfo/metainfo.py b/nomad/metainfo/metainfo.py
index a05f08eb9a..2fb09344fb 100644
--- a/nomad/metainfo/metainfo.py
+++ b/nomad/metainfo/metainfo.py
@@ -2147,11 +2147,18 @@ class MSection(metaclass=MObjectMeta):
         treat_none_as_nan = kwargs.get('treat_none_as_nan', False)
 
         # need to deserialize the definitions first as they are needed for the rest
-        if 'definitions' in data:
-            self.m_set('definitions', data['definitions'], context=m_context)
+        # need to deserialize the metadata first as they are needed for the rest
+        processed = []
+        for item in ('definitions', 'metadata'):
+            if item in data:
+                try:
+                    self.m_set(item, data[item], context=m_context)
+                    processed.append(item)
+                except (ValueError, MetainfoError):
+                    pass
 
         for name, value in data.items():
-            if name == 'definitions' or name.startswith('m_'):
+            if name in processed or name.startswith('m_'):
                 continue
 
             try:
-- 
GitLab