Skip to content
Snippets Groups Projects

F fix compare entities branch2

Merged Alexander Schlemmer requested to merge f-fix-compare-entities-branch2 into dev
1 unresolved thread
Files
5
+ 27
7
@@ -30,15 +30,15 @@ Some simplified functions for generation of records etc.
import sys
import tempfile
from collections.abc import Iterable
import warnings
from collections.abc import Iterable
from subprocess import call
from caosdb.common.datatype import (BOOLEAN, DATETIME, DOUBLE, FILE, INTEGER,
REFERENCE, TEXT, is_reference)
from caosdb.common.models import (Container, Entity, File, Property, Query,
Record, RecordType, get_config,
execute_query)
Record, RecordType, execute_query,
get_config)
def new_record(record_type, name=None, description=None,
@@ -561,7 +561,23 @@ def getCommitIn(folder):
COMPARED = ["name", "role", "datatype", "description", "importance"]
def compare_entities(old_entity, new_entity):
def compare_entities(old_entity: Entity, new_entity: Entity):
"""
Compare two entites.
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.
Additional information means in detail:
- Additional parents (a list under key "parents")
- Information about properties:
- Each property lists either an additional property or a property with a changed:
- ... datatype
- ... importance or
- ... value (not implemented yet)
In case of changed information the value listed under the respective key shows the
value that is stored in the respective entity.
"""
olddiff = {"properties": {}, "parents": []}
newdiff = {"properties": {}, "parents": []}
@@ -616,13 +632,16 @@ def compare_entities(old_entity, new_entity):
newdiff["properties"][prop.name]["importance"] = \
new_entity.get_importance(prop.name)
if ((prop.datatype is not None and
matching[0].datatype is not None) and
(prop.datatype != matching[0].datatype)):
if (prop.datatype != matching[0].datatype):
olddiff["properties"][prop.name]["datatype"] = prop.datatype
newdiff["properties"][prop.name]["datatype"] = \
matching[0].datatype
if (prop.value != matching[0].value):
olddiff["properties"][prop.name]["value"] = prop.value
newdiff["properties"][prop.name]["value"] = \
matching[0].value
if (len(newdiff["properties"][prop.name]) == 0
and len(olddiff["properties"][prop.name]) == 0):
newdiff["properties"].pop(prop.name)
@@ -700,6 +719,7 @@ def apply_to_ids(entities, func):
entities : list of Entity
func : function with one parameter.
"""
for entity in entities:
_apply_to_ids_of_entity(entity, func)
Loading