diff --git a/src/caosdb/common/models.py b/src/caosdb/common/models.py index ecd74551957bbc2b5323abae81b12f7762a0718b..343b0bbbeea8605361422120a4ff2aae445a59e8 100644 --- a/src/caosdb/common/models.py +++ b/src/caosdb/common/models.py @@ -519,9 +519,12 @@ class Entity(object): return p elif isinstance(key, Entity): if key.id is not None: - return self.get_parent(int(key.id)) - else: - return self.get_parent(key.name) + # first try by id + found = self.get_parent(int(key.id)) + if found is not None: + return found + # otherwise by name + return self.get_parent(key.name) else: for p in self.parents: if (p.name is not None diff --git a/unittests/test_record.py b/unittests/test_record.py index d0acb235981cb2bd767af6ad3aebb713a9b9313c..850e9c6921c13ff2271e48c32f329d3de96f9021 100644 --- a/unittests/test_record.py +++ b/unittests/test_record.py @@ -24,7 +24,7 @@ # """Tests for the Record class.""" # pylint: disable=missing-docstring -from caosdb import Entity, Record +from caosdb import Entity, Record, RecordType def test_is_entity(): @@ -59,3 +59,17 @@ def test_get_parent_by_id(): rec.add_parent(234) assert rec.get_parent(None) is None assert rec.get_parent(234) is not None + +def test_get_parent_by_entity(): + rec = Record(id="123") + rt = RecordType("Test", id=234) + rec.add_parent(rt) + assert rec.get_parent(rt) is not None + + rec = Record() + rec.add_parent(234) + assert rec.get_parent(rt) is not None + + rec = Record() + rec.add_parent("Test") + assert rec.get_parent(rt) is not None