From bd7f3ed7208a25ef66278beea1170b89b46e2f76 Mon Sep 17 00:00:00 2001
From: Alexander Schlemmer <alexander@mail-schlemmer.de>
Date: Tue, 8 Mar 2022 09:21:04 +0100
Subject: [PATCH] ENH: default role is Record in high level API and implemented
 generic list support

---
 src/caosdb/high_level_api.py | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/caosdb/high_level_api.py b/src/caosdb/high_level_api.py
index 8d25df15..87c0fc28 100644
--- a/src/caosdb/high_level_api.py
+++ b/src/caosdb/high_level_api.py
@@ -606,7 +606,10 @@ class CaosDBPythonEntity(object):
         Deserialize a yaml representation of an entity in high level API form.
         """
 
-        entity = high_level_type_for_role(serialization["role"])()
+        if "role" in serialization:
+            entity = high_level_type_for_role(serialization["role"])()
+        else:
+            entity = CaosDBPythonRecord()
 
         for parent in serialization["parents"]:
             if "unresolved" in parent:
@@ -795,6 +798,18 @@ def _single_convert_to_python_object(robj: CaosDBPythonEntity,
 
     return robj
 
+def _convert_property_value(propval):
+    if isinstance(propval, CaosDBPythonUnresolvedReference):
+        propval = propval.id
+    elif isinstance(propval, CaosDBPythonEntity):
+        propval = _single_convert_to_entity(
+            standard_type_for_high_level_type(propval)(), propval)
+    elif isinstance(propval, list):
+        propval = [_convert_property_value(element) for element in propval]
+
+    # TODO: test case for list missing
+    
+    return propval
 
 def _single_convert_to_entity(entity: db.Entity,
                               robj: CaosDBPythonEntity):
@@ -833,15 +848,7 @@ def _single_convert_to_entity(entity: db.Entity,
         propval = robj.__getattribute__(prop)
         metadata = robj.get_property_metadata(prop)
 
-        if isinstance(propval, CaosDBPythonUnresolvedReference):
-            propval = propval.id
-        elif isinstance(propval, CaosDBPythonEntity):
-            propval = _single_convert_to_entity(
-                standard_type_for_high_level_type(propval)(), propval)
-        elif isinstance(propval, list):
-            # propval = []
-            if not isinstance(propval[0], int):
-                raise NotImplementedError()
+        propval = _convert_property_value(propval)
         
         entity.add_property(
             name=prop,
-- 
GitLab