Commit 9e6c8f95 authored by Romain Loth's avatar Romain Loth

bugfix support for multiple query (more intuitive behaviour when refine fields are sent empty)

parent a9a43415
...@@ -118,10 +118,13 @@ class MyExtractor: ...@@ -118,10 +118,13 @@ class MyExtractor:
elif qtype == "filter": elif qtype == "filter":
sql_query = None sql_query = None
filter_dict = restparse(queryargs)
# debug # debug
print("filter: REST query is", queryargs) # print("filter: REST query is", filter_dict)
if "query" in queryargs and queryargs["query"] == "*": if "query" in filter_dict and filter_dict["query"] == "*":
print("bombaclass")
# query is "*" <=> all scholars # query is "*" <=> all scholars
sql_query = """ sql_query = """
SELECT doors_uid SELECT doors_uid
...@@ -140,7 +143,6 @@ class MyExtractor: ...@@ -140,7 +143,6 @@ class MyExtractor:
# build constraints from the args # build constraints from the args
# ================================ # ================================
filter_dict = restparse(queryargs)
sql_constraints = [] sql_constraints = []
for key in filter_dict: for key in filter_dict:
known_filter = None known_filter = None
...@@ -154,20 +156,25 @@ class MyExtractor: ...@@ -154,20 +156,25 @@ class MyExtractor:
val = filter_dict[known_filter] val = filter_dict[known_filter]
clause = "" if len(val):
if isinstance(val, list) or isinstance(val, tuple): clause = ""
qwliststr = repr(val) if isinstance(val, list) or isinstance(val, tuple):
qwliststr = sub(r'^\[', '(', qwliststr) tested_array = [x for x in val if x != '']
qwliststr = sub(r'\]$', ')', qwliststr) print("tested_array", tested_array)
clause = 'IN '+qwliststr if len(tested_array):
elif isinstance(val, int): qwliststr = repr(tested_array)
clause = '= %i' % val qwliststr = sub(r'^\[', '(', qwliststr)
elif isinstance(val, float): qwliststr = sub(r'\]$', ')', qwliststr)
clause = '= %f' % val clause = 'IN '+qwliststr
elif isinstance(val, str): elif isinstance(val, int):
clause = '= "%s"' % val clause = '= %i' % val
elif isinstance(val, float):
sql_constraints.append("(%s %s)" % (sql_column, clause)) clause = '= %f' % val
elif isinstance(val, str):
clause = '= "%s"' % val
if len(clause):
sql_constraints.append("(%s %s)" % (sql_column, clause))
# debug # debug
print("sql_constraints", sql_constraints) print("sql_constraints", sql_constraints)
...@@ -198,10 +205,11 @@ class MyExtractor: ...@@ -198,10 +205,11 @@ class MyExtractor:
""" % (" AND ".join(sql_constraints)) """ % (" AND ".join(sql_constraints))
self.cursor.execute(sql_query) # in both cases "*" or constraints
scholar_rows=self.cursor.fetchall() self.cursor.execute(sql_query)
for row in scholar_rows: scholar_rows=self.cursor.fetchall()
scholar_array[ row['doors_uid'] ] = 1 for row in scholar_rows:
scholar_array[ row['doors_uid'] ] = 1
return scholar_array return scholar_array
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment