diff --git a/src/caosdb/apiutils.py b/src/caosdb/apiutils.py index 495941b517940b45e0e722b1534e313dc64dc487..63d966b1ec7b61265093215e174aac8be20c1b79 100644 --- a/src/caosdb/apiutils.py +++ b/src/caosdb/apiutils.py @@ -550,6 +550,12 @@ def compare_entities(old_entity, new_entity): except BaseException: 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: continue @@ -571,6 +577,7 @@ def compare_entities(old_entity, new_entity): olddiff["properties"][prop.name] = {} elif len(matching) == 1: newdiff["properties"][prop.name] = {} + olddiff["properties"][prop.name] = {} if (old_entity.get_importance(prop.name) != new_entity.get_importance(prop.name)): @@ -585,6 +592,12 @@ def compare_entities(old_entity, new_entity): olddiff["properties"][prop.name]["datatype"] = prop.datatype newdiff["properties"][prop.name]["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: raise NotImplementedError() @@ -605,10 +618,10 @@ def compare_entities(old_entity, new_entity): return (olddiff, newdiff) -def describe_diff(olddiff, newdiff, as_update=True): - description = "## Difference between the old and the new version of {}\n\n" +def describe_diff(olddiff, newdiff, name=None, as_update=True): + 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": continue description += "{} differs:\n".format(attr) @@ -625,12 +638,22 @@ def describe_diff(olddiff, newdiff, as_update=True): 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))): + 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") + + 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( + olddiff["properties"][prop]) + description += "new version: {}\n\n".format( + newdiff["properties"][prop]) + + if description != "": + description = ("## Difference between the old and the new " + "version of {}\n\n".format(name))+description + + return description