From fee3418e9af39036e461038db594e3f4b4a1f196 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <henrik@trineo.org> Date: Tue, 12 Feb 2019 16:36:21 +0100 Subject: [PATCH] ENH: added function that describes the diff objects --- src/caosdb/apiutils.py | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/caosdb/apiutils.py b/src/caosdb/apiutils.py index 30cad592..5fff7fd9 100644 --- a/src/caosdb/apiutils.py +++ b/src/caosdb/apiutils.py @@ -532,8 +532,8 @@ COMPARED = ["name", "role", "datatype", "description", "importance"] def compare_entities(old_entity, new_entity): - olddiff = {"properties": {}, "parents": {}} - newdiff = {"properties": {}, "parents": {}} + olddiff = {"properties": {}, "parents": []} + newdiff = {"properties": {}, "parents": []} if old_entity is new_entity: return (olddiff, newdiff) @@ -596,10 +596,41 @@ def compare_entities(old_entity, new_entity): for parent in old_entity.parents: if len([0 for p in new_entity.parents if p.name == parent.name]) == 0: - olddiff["parents"][parent.name] = {} + olddiff["parents"].append(parent.name) for parent in new_entity.parents: if len([0 for p in old_entity.parents if p.name == parent.name]) == 0: - newdiff["parents"][parent.name] = {} + newdiff["parents"].append(parent.name) return (olddiff, newdiff) + + +def describe_diff(olddiff, newdiff, as_update=True): + description = "## Difference between the old and the new version of {}\n\n" + + for attr in list(set(list(olddiff.keys)+list(newdiff.keys))): + if attr == "parents" or attr == "properties": + continue + description += "{} differs:\n".format(attr) + description += "old version: {}\n".format( + olddiff[attr] if attr in olddiff else "not set") + description += "new version: {}\n\n".format( + newdiff[attr] if attr in newdiff else "not set") + + if len(olddiff["parents"]) > 0: + description += ("Parents that are only in the old version:\n" + + ", ".join(olddiff["parents"])) + + if len(newdiff["parents"]) > 0: + description += ("Parents that are only in the new version:\n" + + ", ".join(olddiff["parents"])) + + for prop in list(set(list(olddiff["properties"].keys) + + list(newdiff["properties"].keys))): + description += "property {} differs:\n".format(prop) + description += "old version: {}\n".format( + olddiff["properties"][prop] if prop + in olddiff["properties"] else "has none") + description += "new version: {}\n\n".format( + newdiff["properties"][prop] if prop + in newdiff["properties"] else "has none") -- GitLab