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.
@@ -30,15 +30,15 @@ Some simplified functions for generation of records etc.
import sys
import sys
import tempfile
import tempfile
from collections.abc import Iterable
import warnings
import warnings
 
from collections.abc import Iterable
from subprocess import call
from subprocess import call
from caosdb.common.datatype import (BOOLEAN, DATETIME, DOUBLE, FILE, INTEGER,
from caosdb.common.datatype import (BOOLEAN, DATETIME, DOUBLE, FILE, INTEGER,
REFERENCE, TEXT, is_reference)
REFERENCE, TEXT, is_reference)
from caosdb.common.models import (Container, Entity, File, Property, Query,
from caosdb.common.models import (Container, Entity, File, Property, Query,
Record, RecordType, get_config,
Record, RecordType, execute_query,
execute_query)
get_config)
def new_record(record_type, name=None, description=None,
def new_record(record_type, name=None, description=None,
@@ -561,7 +561,23 @@ def getCommitIn(folder):
@@ -561,7 +561,23 @@ def getCommitIn(folder):
COMPARED = ["name", "role", "datatype", "description", "importance"]
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": []}
olddiff = {"properties": {}, "parents": []}
newdiff = {"properties": {}, "parents": []}
newdiff = {"properties": {}, "parents": []}
@@ -616,13 +632,16 @@ def compare_entities(old_entity, new_entity):
@@ -616,13 +632,16 @@ def compare_entities(old_entity, new_entity):
newdiff["properties"][prop.name]["importance"] = \
newdiff["properties"][prop.name]["importance"] = \
new_entity.get_importance(prop.name)
new_entity.get_importance(prop.name)
if ((prop.datatype is not None and
if (prop.datatype != matching[0].datatype):
matching[0].datatype is not None) and
(prop.datatype != matching[0].datatype)):
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 (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
if (len(newdiff["properties"][prop.name]) == 0
and len(olddiff["properties"][prop.name]) == 0):
and len(olddiff["properties"][prop.name]) == 0):
newdiff["properties"].pop(prop.name)
newdiff["properties"].pop(prop.name)
@@ -700,6 +719,7 @@ def apply_to_ids(entities, func):
@@ -700,6 +719,7 @@ def apply_to_ids(entities, func):
entities : list of Entity
entities : list of Entity
func : function with one parameter.
func : function with one parameter.
"""
"""
 
for entity in entities:
for entity in entities:
_apply_to_ids_of_entity(entity, func)
_apply_to_ids_of_entity(entity, func)
Loading