From 5cba79f3115466f35dbe913efffcef0c276ee555 Mon Sep 17 00:00:00 2001 From: Alexander Kreft <akreft@trineo.org> Date: Fri, 8 Oct 2021 16:04:05 +0200 Subject: [PATCH] ENH: Better handling for entity lists --- src/caosadvancedtools/cfood.py | 7 +++++++ unittests/test_cfood.py | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/caosadvancedtools/cfood.py b/src/caosadvancedtools/cfood.py index 48b423e0..6b71b919 100644 --- a/src/caosadvancedtools/cfood.py +++ b/src/caosadvancedtools/cfood.py @@ -47,6 +47,7 @@ from abc import ABCMeta, abstractmethod from datetime import datetime import caosdb as db +from caosdb.common.models import Entity from caosdb.exceptions import (BadQueryError, EmptyUniqueQueryError, QueryNotUniqueError, TransactionError) @@ -661,12 +662,18 @@ def assure_has_property(entity, name, value, to_be_updated=None, if isinstance(value, db.Entity): value = value.id + + if isinstance(value, list): + value = [i.id if isinstance(i, db.Entity) else i for i in value] for el in possible_properties: tmp_value = el.value if isinstance(tmp_value, db.Entity): tmp_value = el.value.id + + if isinstance(tmp_value, list): + tmp_value = [i.id if isinstance(i, db.Entity) else i for i in tmp_value] if tmp_value == value: contained = True diff --git a/unittests/test_cfood.py b/unittests/test_cfood.py index ab5cb11e..5f257468 100644 --- a/unittests/test_cfood.py +++ b/unittests/test_cfood.py @@ -190,6 +190,28 @@ class InsertionTest(unittest.TestCase): value=new_int, to_be_updated=to_be_updated) assert to_be_updated[0] is entity + """Test properties with lists""" + rec1 = db.Record(id=12323) + rec1.add_property("Exp", value=[123333], datatype=db.LIST("Exp")) + rec2 = db.Record(id=123333) + update = [] + assure_has_property(rec1, "Exp", [rec2], to_be_updated=update) + assert len(update) == 0 + update = [] + assure_has_property(rec1, "Exp", [123333], to_be_updated=update) + assert len(update) == 0 + update = [] + assure_has_property(rec1, "Exp2", [123333, 456, 789], to_be_updated=update) + assert len(update) == 1 + + rec = db.Record(id=456456) + rec3 = db.Record(id=789789) + rec.add_property("Exp", value=[123123, rec3], datatype=db.LIST("Exp")) + rec2 = db.Record(id=123123) + update = [] + assure_has_property(rec, "Exp", [rec2, 789789], to_be_updated=update) + assert len(update) == 0 + def test_property_is(self): """Test properties with string, int, float, and Boolean values""" entity = db.Record() -- GitLab