Skip to content
Snippets Groups Projects
Commit 9b3d756a authored by Alexander Schlemmer's avatar Alexander Schlemmer
Browse files

FIX: compare_entities now raises an error when trying to compare abstract properties directly

parent ab379939
No related branches found
No related tags found
2 merge requests!107ENH: add entity getters and cached functions,!103Improving the compare_entities functions
Pipeline #36396 passed with warnings
......@@ -219,7 +219,7 @@ def compare_entities(old_entity: Entity, new_entity: Entity,
of circular references).
NOTE: This function does not work for abstract properties! I.e. it is not possible
to directly compare two entities that are of class db.Property.
to directly compare two entities that are of class caosdb.Property.
Parameters
----------
......@@ -233,6 +233,12 @@ def compare_entities(old_entity: Entity, new_entity: Entity,
identical records are stored in different objects. Default is False.
"""
for entity in (old_entity, new_entity):
if isinstance(entity, Property):
raise NotImplementedError("The function compare_entities does not work for "
"comparing abstract properties.")
olddiff: Dict[str, Any] = {"properties": {}, "parents": []}
newdiff: Dict[str, Any] = {"properties": {}, "parents": []}
......
......@@ -130,6 +130,10 @@ def test_compare_entities():
assert "tests_234234" in diff_r1["properties"]
assert "tests_TT" in diff_r2["properties"]
# Check the value:
assert diff_r1["properties"]["tests"]["value"] == 3
assert diff_r2["properties"]["tests"]["value"] == 45
def test_compare_equality():
r1 = db.Record()
r2 = db.Record()
......@@ -187,6 +191,10 @@ def test_compare_entities_units():
assert diff_r1["properties"]["test"]["unit"] == "cm"
assert diff_r2["properties"]["test"]["unit"] == "m"
# Check the value:
assert diff_r1["properties"]["tests"]["value"] == 3
assert diff_r2["properties"]["tests"]["value"] == 45
def test_compare_special_properties():
# Test for all known special properties:
......@@ -247,46 +255,13 @@ def test_compare_importances():
assert len(diff["parents"]) == 0
@pytest.mark.xfail
def test_compare_properties():
p1 = db.Property()
p2 = db.Property()
diff_r1, diff_r2 = compare_entities(p1, p2)
assert len(diff_r1["parents"]) == 0
assert len(diff_r2["parents"]) == 0
assert len(diff_r1["properties"]) == 0
assert len(diff_r2["properties"]) == 0
p1.importance = "SUGGESTED"
diff_r1, diff_r2 = compare_entities(p1, p2)
assert len(diff_r1["parents"]) == 0
assert len(diff_r2["parents"]) == 0
assert len(diff_r1["properties"]) == 0
assert len(diff_r2["properties"]) == 0
assert "importance" in diff_r1
assert diff_r1["importance"] == "SUGGESTED"
# TODO: I'm not sure why it is not like this:
# assert diff_r2["importance"] is None
# ... but:
assert "importance" not in diff_r2
p2.importance = "SUGGESTED"
p1.value = 42
p2.value = 4
diff_r1, diff_r2 = compare_entities(p1, p2)
assert len(diff_r1["parents"]) == 0
assert len(diff_r2["parents"]) == 0
assert len(diff_r1["properties"]) == 0
assert len(diff_r2["properties"]) == 0
# Comparing values currently does not seem to be implemented:
assert "value" in diff_r1
assert diff_r1["value"] == 42
assert "value" in diff_r2
assert diff_r2["value"] == 4
with pytest.raises(NotImplementedError, match=".*abstract properties.*"):
compare_entities(p1, p2)
def test_copy_entities():
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment