summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/db_op.py19
-rw-r--r--src/server/rz_kernel.py7
-rw-r--r--src/server/rz_server.py2
3 files changed, 19 insertions, 9 deletions
diff --git a/src/server/db_op.py b/src/server/db_op.py
index b116ee6f..ce800790 100644
--- a/src/server/db_op.py
+++ b/src/server/db_op.py
@@ -946,16 +946,25 @@ class DBO_rzdoc__delete(DB_op):
db_q = DB_Query(q_arr)
self.add_db_query(db_q)
-class DBO_rzdoc__list(DB_op):
+class DBO_rzdoc__search(DB_op):
- def __init__(self):
+ def __init__(self, search_query, rzdoc__name__max_length=neo4j_schema.RZDOC__NAME__MAX_LENGTH):
"""
- list available rhizi docs (common to all users)
+ Search rhizi docs by name:
+ - search is case insensitive
+ - any substring occurrence is considered a match
"""
- super(DBO_rzdoc__list, self).__init__()
+ super(DBO_rzdoc__search, self).__init__()
q_arr = ['match (n:%s)' % (neo4j_schema.META_LABEL__RZDOC_TYPE),
'return n']
- db_q = DB_Query(q_arr)
+ param_set = {}
+
+ if search_query is not None and len(search_query) > 0:
+ lim_x_fix = rzdoc__name__max_length - len(search_query) # pre/post prefix limit
+ q_arr.insert(1, 'where n.name =~ {search_query_regx}')
+ param_set = {'search_query_regx': '(?i).{0,%s}%s.{0,%s}' % (lim_x_fix, search_query, lim_x_fix)}
+
+ db_q = DB_Query(q_arr, param_set)
self.add_db_query(db_q)
class DBO_rzdoc__lookup_by_name(DB_op):
diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py
index eccde44d..c0cf74c8 100644
--- a/src/server/rz_kernel.py
+++ b/src/server/rz_kernel.py
@@ -368,14 +368,15 @@ class RZ_Kernel(object):
ret_list = list(rzdoc_r_set)
return ret_list
-
- def rzdoc__list(self, ctx=None):
+ @deco__DB_status_check
+ def rzdoc__search(self, search_query, ctx=None):
"""
List available RZDocs
@return: RZDoc object
"""
- op = DBO_rzdoc__list()
+ rzdoc__name__max_length = self.db_metablock['rzdoc__name__max_length']
+ op = DBO_rzdoc__search(search_query, rzdoc__name__max_length)
op_ret = self.db_ctl.exec_op(op)
return op_ret
diff --git a/src/server/rz_server.py b/src/server/rz_server.py
index 6911322d..2a15db84 100644
--- a/src/server/rz_server.py
+++ b/src/server/rz_server.py
@@ -199,7 +199,7 @@ def init_rest_interface(cfg, flask_webapp):
# doc endpoints
rest_entry('/rz/<path:rzdoc_name>', rz_api_rest.rzdoc__via_rz_url, {'methods': ['GET']}), # pretty URLs
rest_entry('/api/rzdoc/clone', rz_api_rest.rzdoc_clone),
- rest_entry('/api/rzdoc/list', rz_api_rest.rzdoc__list),
+ rest_entry('/api/rzdoc/search', rz_api_rest.rzdoc__search),
rest_entry('/api/rzdoc/<path:rzdoc_name>/create', rz_api_rest.rzdoc__create),
rest_entry('/api/rzdoc/<path:rzdoc_name>/delete', rz_api_rest.rzdoc__delete, {'methods': ['GET', 'DELETE']}), # TODO: rm 'GET' once we have UI deletion support - see #436