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