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.
import sys
import tempfile
from collections.abc import Iterable
import warnings
from subprocess import call
from caosdb.common.datatype import (BOOLEAN, DATETIME, DOUBLE, FILE, INTEGER,
@@ -86,9 +87,19 @@ def new_record(record_type, name=None, description=None,
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):
@@ -96,7 +107,9 @@ def retrieve_entities_with_ids(entities):
step = 20
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
@@ -707,3 +720,28 @@ def _apply_to_ids_of_entity(entity, func):
else:
if prop.value is not None:
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