diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-05-21 18:39:26 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-05-22 01:49:28 +0300 |
| commit | b5bdb3669f59981e73fb900ea1fba441ce383cd9 (patch) | |
| tree | 02de5f3f5a423d6b60ae5055b6ee5810a99ed001 /src/server | |
| parent | d15fa746bbb0153bd446afb2297a01b4e89ed9cf (diff) | |
refactoring DBO_rzdoc__list -> DBO_rzdoc__search
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/db_op.py | 19 | ||||
| -rw-r--r-- | src/server/rz_kernel.py | 7 | ||||
| -rw-r--r-- | src/server/rz_server.py | 2 |
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 |
