Skip to content
Snippets Groups Projects

ENH: add resolve_value to Property

Merged Henrik tom Wörden requested to merge f-resolve-value into dev
Files
3
+ 41
3
@@ -31,6 +31,7 @@ Some simplified functions for generation of records etc.
@@ -31,6 +31,7 @@ Some simplified functions for generation of records etc.
import sys
import sys
import tempfile
import tempfile
from collections.abc import Iterable
from collections.abc import Iterable
 
import warnings
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,
@@ -86,9 +87,19 @@ def new_record(record_type, name=None, description=None,
@@ -86,9 +87,19 @@ def new_record(record_type, name=None, description=None,
def id_query(ids):
def id_query(ids):
q = "FIND Entity with " + " OR ".join(["id={}".format(id) for id in ids])
warnings.warn("Please use 'create_id_query', which only creates"
 
"the string.", DeprecationWarning)
return execute_query(q)
return execute_query(create_id_query(ids))
 
 
 
def create_id_query(ids):
 
return "FIND ENTITY WITH " + " OR ".join(
 
["ID={}".format(id) for id in ids])
 
 
 
def retrieve_entity_with_id(eid):
 
return execute_query("FIND ENTITY WITH ID={}".format(eid), unique=True)
def retrieve_entities_with_ids(entities):
def retrieve_entities_with_ids(entities):
@@ -96,7 +107,9 @@ def retrieve_entities_with_ids(entities):
@@ -96,7 +107,9 @@ def retrieve_entities_with_ids(entities):
step = 20
step = 20
for i in range(len(entities)//step+1):
for i in range(len(entities)//step+1):
collection.extend(id_query(entities[i*step:(i+1)*step]))
collection.extend(
 
execute_query(
 
create_id_query(entities[i*step:(i+1)*step])))
return collection
return collection
@@ -707,3 +720,28 @@ def _apply_to_ids_of_entity(entity, func):
@@ -707,3 +720,28 @@ def _apply_to_ids_of_entity(entity, func):
else:
else:
if prop.value is not None:
if prop.value is not None:
prop.value = func(prop.value)
prop.value = func(prop.value)
 
 
 
def resolve_reference(prop: Property):
 
"""resolves the value of a reference property
 
 
The integer value is replaced with the entity object.
 
If the property is not a reference, then the function returns without
 
change.
 
"""
 
 
if not prop.is_reference(server_retrieval=True):
 
return
 
 
if isinstance(prop.value, list):
 
referenced = []
 
 
for val in prop.value:
 
if isinstance(val, int):
 
referenced.append(retrieve_entity_with_id(val))
 
else:
 
referenced.append(val)
 
prop.value = referenced
 
else:
 
if isinstance(prop.value, int):
 
prop.value = retrieve_entity_with_id(prop.value)
Loading