Skip to content
Snippets Groups Projects
Verified Commit 9e48d028 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

FIX: deal with list properties

parent a0b5c8c3
No related branches found
No related tags found
No related merge requests found
import abc
import time
from logging import getLogger
from collections import defaultdict
import caosdb
......@@ -59,8 +60,6 @@ class FindResult(Result):
else:
self._results=rows
def __iter__(self):
return iter(self._results)
......@@ -163,6 +162,13 @@ class DefaultCaosDBClientDelegate:
return f' {n}{p}{o}"{v}"'
raise NotImplementedError("_get_filter_clause(%s)", fil)
def _query(self, query):
t1 = time.time()
result = self._caosdb.execute_query(query)
t2 = time.time()
LOGGER.debug("[%s] execute_query(%s) - %s", str(t1), query, str(t2 - t1))
return result
def _find(self, record_type, *args, **kwargs):
filter_clause = ""
if "filter" in kwargs:
......@@ -170,7 +176,7 @@ class DefaultCaosDBClientDelegate:
filter_clause = " WITH " + self._get_filter_clause(fil)
query = f'FIND RECORD "{record_type}"{filter_clause}'
return self._caosdb.execute_query(query)
return self._query(query)
def _get_property_values(self, container, projection):
if projection is None:
......@@ -181,9 +187,23 @@ class DefaultCaosDBClientDelegate:
"description": e.description})
for p in e.get_properties():
row[p.name] = p.value
if isinstance(p.value, list):
if len(p.value):
row[p.name] = p.value[0]
else:
row[p.name] = None
rows.append(row)
return rows
rows = container.get_property_values(*projection)
rows = [list(t) for t in rows]
for row in rows:
for i in range(len(row)):
val = row[i]
if isinstance(val, list):
if len(val):
row[i] = val[0]
else:
row[i] = None
return rows
def find(self, record_type, limit=None, sort=None, skip=None, *args, **kwargs):
......@@ -205,12 +225,12 @@ class DefaultCaosDBClientDelegate:
return FindResult([], [])
def list_record_type_names(self):
res = self._caosdb.execute_query("SELECT name FROM RECORDTYPE")
res = self._query("SELECT name FROM RECORDTYPE")
return [e.name for e in res if e.name is not None] + ["caosdb_auth_user"]
def list_property_names(self):
res1 = self._caosdb.execute_query("SELECT name FROM PROPERTY")
res2 = self._caosdb.execute_query("SELECT name FROM RECORDTYPE")
res1 = self._query("SELECT name FROM PROPERTY")
res2 = self._query("SELECT name FROM RECORDTYPE")
return [e.name for e in res1 + res2 if e.name is not None]
def create_record_type(self, name : str, properties : list, parents : list):
......@@ -318,8 +338,7 @@ class DefaultCaosDBClientDelegate:
query = self._generate_query(record_type, sort, projection, filter,
count)
LOGGER.debug("execute_query(%s)", query)
res = self._caosdb.execute_query(query)
res = self._query(query)
if count:
return CountResult(res, count)
rows = self._get_property_values(res, projection)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment