diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b9f7a0c0c0da499fb60547ee058156c4959999b..9e4d7301fbce387aa96fdeef759c75457422ce96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed ### +* handling of special attributes (name, id, ...) in `apiutils.empty_diff` + ### Security ### ### Documentation ### diff --git a/src/caosdb/apiutils.py b/src/caosdb/apiutils.py index 0651e4930072242524dc955c6ae69ca70b5f877a..0862cf9f32575b9773bc16d845bb459d67b0140c 100644 --- a/src/caosdb/apiutils.py +++ b/src/caosdb/apiutils.py @@ -353,10 +353,14 @@ def empty_diff(old_entity: Entity, new_entity: Entity, compare_referenced_record olddiff, newdiff = compare_entities( old_entity, new_entity, compare_referenced_records) for diff in [olddiff, newdiff]: - for key in diff: + for key in ["parents", "properties"]: if len(diff[key]) > 0: # There is a difference somewhere in the diff return False + for key in SPECIAL_ATTRIBUTES: + if key in diff and diff[key]: + # There is a difference in at least one special attribute + return False # all elements of the two diffs were empty return True diff --git a/unittests/test_apiutils.py b/unittests/test_apiutils.py index 7b22d9956931fff4bded7f4eab813e9b91181997..f9de6d1a037667d0ead0f02439bde13ac4f14f60 100644 --- a/unittests/test_apiutils.py +++ b/unittests/test_apiutils.py @@ -466,6 +466,15 @@ def test_empty_diff(): assert not empty_diff(rec_a, rec_b) assert empty_diff(rec_a, rec_b, compare_referenced_records=True) + # special case of ids + rec_a = db.Record(id=12) + rec_b = db.Record() + assert not empty_diff(rec_a, rec_b) + rec_b.id = 13 + assert not empty_diff(rec_a, rec_b) + rec_b.id = 12 + assert empty_diff(rec_a, rec_b) + def test_force_merge(): """Test whether a forced merge overwrites existing properties correctly."""