From d2fb4286b2f1c61dceccd87391f02d09743be4aa Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Wed, 14 Dec 2022 17:24:02 +0100 Subject: [PATCH] WIP: file storage: link --- src/caosdb/common/models.py | 46 ++++++++----------------------------- unittests/test_datatype.py | 6 +++++ 2 files changed, 15 insertions(+), 37 deletions(-) diff --git a/src/caosdb/common/models.py b/src/caosdb/common/models.py index 42861bf1..306cba6c 100644 --- a/src/caosdb/common/models.py +++ b/src/caosdb/common/models.py @@ -1396,7 +1396,7 @@ def _parse_value(datatype, value): # This is for a special case, where the xml parser could not differentiate # between single values and lists with one element. As - if hasattr(value, "__len__") and len(value) == 1: + if hasattr(value, "__len__") and len(value) == 1 and not isinstance(value, str): return _parse_value(datatype, value[0]) # deal with references @@ -1450,23 +1450,12 @@ class QueryTemplate(): self.description = description self.query = query self._cuid = None - self.value = None - self.datatype = None self.messages = _Messages() - self.properties = None - self.parents = None - self.path = None - self.file = None - self._checksum = None - self._size = None - self._upload = None - self.unit = None self.acl = None self.permissions = None self.is_valid = lambda: False self.is_deleted = lambda: False self.version = None - self.state = None def retrieve(self, raise_exception_on_error=True, unique=True, sync=True, flags=None): @@ -2556,31 +2545,13 @@ def _basic_sync(e_local, e_remote): "this client did't know about it yet.".format( e_remote.role, e_local.role)) - e_local.id = e_remote.id - e_local.name = e_remote.name - e_local.description = e_remote.description - e_local.path = e_remote.path - e_local.link_target = e_remote.link_target - e_local._checksum = e_remote._checksum - e_local._size = e_remote._size - e_local.datatype = e_remote.datatype - e_local.unit = e_remote.unit - e_local.value = e_remote.value - e_local.properties = e_remote.properties - e_local.parents = e_remote.parents - e_local.messages = e_remote.messages - e_local.acl = e_remote.acl - e_local.permissions = e_remote.permissions - e_local.is_valid = e_remote.is_valid - e_local.is_deleted = e_remote.is_deleted - e_local.version = e_remote.version - e_local.state = e_remote.state - - if hasattr(e_remote, "query"): - e_local.query = e_remote.query - - if hasattr(e_remote, "affiliation"): - e_local.affiliation = e_remote.affiliation + for attr in ["path", "link_target", "_checksum", "_size", "datatype", + "unit", "value", "properties", "parents", "messages", "acl", + "permissions", "is_valid", "is_deleted", "version", "state", + "query", "affiliation", "id", "name", "description"]: + + if hasattr(e_remote, attr): + setattr(e_local, attr, getattr(e_remote, attr)) return e_local @@ -3064,6 +3035,7 @@ class Container(list): for local_entity in self: if (sync_dict[local_entity] is None + and hasattr(local_entity, "path") and local_entity.path is not None): sync_remote_entities = [] diff --git a/unittests/test_datatype.py b/unittests/test_datatype.py index 9b3c6267..5e421175 100644 --- a/unittests/test_datatype.py +++ b/unittests/test_datatype.py @@ -87,3 +87,9 @@ def test_parsing_of_references(): entity = db.Record(name="bla") assert id(_parse_value(dtype, entity)) == id(entity) + + +def test_parsing_of_single_list_item_str_len_one(): + db.Record().add_property("blub", datatype=db.LIST(db.TEXT), value=["a"]) + db.Record().add_property("blub", datatype=db.LIST(db.INTEGER), value=[1]) + db.Record().add_property("blub", datatype=db.LIST("bla"), value=["a"]) -- GitLab