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
Branches
Tags
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