From b5bdb3669f59981e73fb900ea1fba441ce383cd9 Mon Sep 17 00:00:00 2001 From: LV-426 Date: Thu, 21 May 2015 18:39:26 +0300 Subject: refactoring DBO_rzdoc__list -> DBO_rzdoc__search --- src/server/db_op.py | 19 ++++++++++++++----- src/server/rz_kernel.py | 7 ++++--- src/server/rz_server.py | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) (limited to 'src') 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/', 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//create', rz_api_rest.rzdoc__create), rest_entry('/api/rzdoc//delete', rz_api_rest.rzdoc__delete, {'methods': ['GET', 'DELETE']}), # TODO: rm 'GET' once we have UI deletion support - see #436 -- cgit v1.3.1