Skip to content
Snippets Groups Projects
Commit ddd2d8dc authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

Merge branch 'mr-enhance-diff' into 'dev'

ENH: fixed bugs in compare function and enhanced the description of a diff of two records

See merge request caosdb/caosdb-pylib!10
parents cf3eecec bf7e3f5a
Branches
Tags
No related merge requests found
...@@ -550,6 +550,12 @@ def compare_entities(old_entity, new_entity): ...@@ -550,6 +550,12 @@ def compare_entities(old_entity, new_entity):
except BaseException: except BaseException:
new_entity_attr_exists = False new_entity_attr_exists = False
if old_entity_attr_exists and (oldattr == "" or oldattr is None):
old_entity_attr_exists = False
if new_entity_attr_exists and (newattr == "" or newattr is None):
new_entity_attr_exists = False
if not old_entity_attr_exists and not new_entity_attr_exists: if not old_entity_attr_exists and not new_entity_attr_exists:
continue continue
...@@ -571,6 +577,7 @@ def compare_entities(old_entity, new_entity): ...@@ -571,6 +577,7 @@ def compare_entities(old_entity, new_entity):
olddiff["properties"][prop.name] = {} olddiff["properties"][prop.name] = {}
elif len(matching) == 1: elif len(matching) == 1:
newdiff["properties"][prop.name] = {} newdiff["properties"][prop.name] = {}
olddiff["properties"][prop.name] = {}
if (old_entity.get_importance(prop.name) != if (old_entity.get_importance(prop.name) !=
new_entity.get_importance(prop.name)): new_entity.get_importance(prop.name)):
...@@ -585,6 +592,12 @@ def compare_entities(old_entity, new_entity): ...@@ -585,6 +592,12 @@ def compare_entities(old_entity, new_entity):
olddiff["properties"][prop.name]["datatype"] = prop.datatype olddiff["properties"][prop.name]["datatype"] = prop.datatype
newdiff["properties"][prop.name]["datatype"] = \ newdiff["properties"][prop.name]["datatype"] = \
matching[0].datatype matching[0].datatype
if (len(newdiff["properties"][prop.name]) == 0
and len(olddiff["properties"][prop.name]) == 0):
newdiff["properties"].pop(prop.name)
olddiff["properties"].pop(prop.name)
else: else:
raise NotImplementedError() raise NotImplementedError()
...@@ -605,10 +618,10 @@ def compare_entities(old_entity, new_entity): ...@@ -605,10 +618,10 @@ def compare_entities(old_entity, new_entity):
return (olddiff, newdiff) return (olddiff, newdiff)
def describe_diff(olddiff, newdiff, as_update=True): def describe_diff(olddiff, newdiff, name=None, as_update=True):
description = "## Difference between the old and the new version of {}\n\n" description = ""
for attr in list(set(list(olddiff.keys)+list(newdiff.keys))): for attr in list(set(list(olddiff.keys())+list(newdiff.keys()))):
if attr == "parents" or attr == "properties": if attr == "parents" or attr == "properties":
continue continue
description += "{} differs:\n".format(attr) description += "{} differs:\n".format(attr)
...@@ -625,12 +638,22 @@ def describe_diff(olddiff, newdiff, as_update=True): ...@@ -625,12 +638,22 @@ def describe_diff(olddiff, newdiff, as_update=True):
description += ("Parents that are only in the new version:\n" description += ("Parents that are only in the new version:\n"
+ ", ".join(olddiff["parents"])) + ", ".join(olddiff["parents"]))
for prop in list(set(list(olddiff["properties"].keys) for prop in list(set(list(olddiff["properties"].keys())
+ list(newdiff["properties"].keys))): + list(newdiff["properties"].keys()))):
description += "property {} differs:\n".format(prop) description += "property {} differs:\n".format(prop)
if prop not in olddiff["properties"]:
description += "it does not exist in the old version: \n"
elif prop not in newdiff["properties"]:
description += "it does not exist in the new version: \n"
else:
description += "old version: {}\n".format( description += "old version: {}\n".format(
olddiff["properties"][prop] if prop olddiff["properties"][prop])
in olddiff["properties"] else "has none")
description += "new version: {}\n\n".format( description += "new version: {}\n\n".format(
newdiff["properties"][prop] if prop newdiff["properties"][prop])
in newdiff["properties"] else "has none")
if description != "":
description = ("## Difference between the old and the new "
"version of {}\n\n".format(name))+description
return description
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment