Skip to content
Snippets Groups Projects
Commit 15ac87c5 authored by florian's avatar florian
Browse files

WIP: Add `empty_diff` function to apiutils

parent d38254bd
No related branches found
No related tags found
2 merge requests!79Release 0.10.0,!72F fix merge entity conflicts
Pipeline #29678 failed
...@@ -188,9 +188,8 @@ def getCommitIn(folder): ...@@ -188,9 +188,8 @@ def getCommitIn(folder):
return t.readline().strip() return t.readline().strip()
def compare_entities(old_entity: Entity, new_entity: Entity): def compare_entities(old_entity: Entity, new_entity: Entity, compare_referenced_records: bool = False):
""" """Compare two entites.
Compare two entites.
Return a tuple of dictionaries, the first index belongs to additional information for old Return a tuple of dictionaries, the first index belongs to additional information for old
entity, the second index belongs to additional information for new entity. entity, the second index belongs to additional information for new entity.
...@@ -204,6 +203,20 @@ def compare_entities(old_entity: Entity, new_entity: Entity): ...@@ -204,6 +203,20 @@ def compare_entities(old_entity: Entity, new_entity: Entity):
- ... value (not implemented yet) - ... value (not implemented yet)
In case of changed information the value listed under the respective key shows the In case of changed information the value listed under the respective key shows the
value that is stored in the respective entity. value that is stored in the respective entity.
If `compare_referenced_records` is `True`, also referenced entities will be
compared using this function, but with `compare_referenced_records = False`
to prevent infinite recursion in case of circular references.
Parameters
----------
old_entity, new_entity : Entity
Entities to be compared
compare_referenced_records : bool, optional
Whether to compare referenced records in case of both, `old_entity` and
`new_entity`, have the same reference properties and both have a Record
object as value.
""" """
olddiff: Dict[str, Any] = {"properties": {}, "parents": []} olddiff: Dict[str, Any] = {"properties": {}, "parents": []}
newdiff: Dict[str, Any] = {"properties": {}, "parents": []} newdiff: Dict[str, Any] = {"properties": {}, "parents": []}
...@@ -300,6 +313,31 @@ def compare_entities(old_entity: Entity, new_entity: Entity): ...@@ -300,6 +313,31 @@ def compare_entities(old_entity: Entity, new_entity: Entity):
return (olddiff, newdiff) return (olddiff, newdiff)
def empty_diff(old_entity: Entity, new_entity: Entity, compare_referenced_records: bool = False):
"""Check whether the `compare_entities` found any differences between
old_entity and new_entity.
Parameters
----------
old_entity, new_entity : Entity
Entities to be compared
compare_referenced_records : bool, optional
Whether to compare referenced records in case of both, `old_entity` and
`new_entity`, have the same reference properties and both have a Record
object as value.
"""
olddiff, newdiff = compare_entities(
old_entity, new_entity, compare_referenced_records)
for diff in [olddiff, newdiff]:
for key in diff:
if len(diff[key]) > 0:
# There is a difference somewhere in the diff
return False
# all elements of the two diffs were empty
return True
def merge_entities(entity_a: Entity, entity_b: Entity): def merge_entities(entity_a: Entity, entity_b: Entity):
""" """
Merge entity_b into entity_a such that they have the same parents and properties. Merge entity_b into entity_a such that they have the same parents and properties.
......
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