diff --git a/src/caosdb/high_level_api.py b/src/caosdb/high_level_api.py index 8d25df15236ffdbc445385eb6bd5872fa426074c..87c0fc28790c78eab58772f5acbf997532a4f880 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,