diff options
| -rw-r--r-- | src/server-tests/test_neo4j_cypher.py | 2 | ||||
| -rw-r--r-- | src/server/neo4j_cypher.py | 24 | ||||
| -rw-r--r-- | src/server/rz_api_rest.py | 20 |
3 files changed, 27 insertions, 19 deletions
diff --git a/src/server-tests/test_neo4j_cypher.py b/src/server-tests/test_neo4j_cypher.py index 4f969c37..c63cc618 100644 --- a/src/server-tests/test_neo4j_cypher.py +++ b/src/server-tests/test_neo4j_cypher.py @@ -114,7 +114,7 @@ class Test_DB_Op(unittest.TestCase): self.test_T__common(dbq_set, DB_Query.t__add_node_filter__meta_label) - def test_T__add_node_filter__doc_id_label(self): + def test_T__add_node_filter__rzdoc_id_label(self): test_label = neo4j_test_util.rand_label() dbq_set = [] diff --git a/src/server/neo4j_cypher.py b/src/server/neo4j_cypher.py index 579385da..ae626b57 100644 --- a/src/server/neo4j_cypher.py +++ b/src/server/neo4j_cypher.py @@ -1,12 +1,14 @@ """ -Cypher language parser - - clear logical separation between lexing/parsing still missing - - e_XXX class object should be considered internal +Neo4j DB object """ + +from enum import Enum +from neo4j_cypher_parser import Cypher_Parser, e_clause__where, e_keyword, \ + e_value, e_label_set, p_node, p_path, e_ident, p_rel import re -from collections import defaultdict import logging -from enum import Enum +import neo4j_cypher_parser +from decorator import __call__ # # meta label schema @@ -89,14 +91,14 @@ class Query_Transformation(object): class QT_Node_Filter__Doc_ID_Label(Query_Transformation): - def __init__(self, doc_id): - self.doc_id = doc_id + def __init__(self, rzdoc_id): + self.rzdoc_id = rzdoc_id def apply_to_single_query(self, dbq): - doc_id_label = META_LABEL__RZ_DOC_PREFIX + self.doc_id + rzdoc_id_label = META_LABEL__RZ_DOC_PREFIX + self.rzdoc_id rgx__doc_label = re.compile(r'%s[\w\d_]+' % (META_LABEL__RZ_DOC_PREFIX)) - assert None != rgx__doc_label.match(doc_id_label), 'Illegal doc ID label: %s' % (doc_id_label) # validate doc label + assert None != rgx__doc_label.match(rzdoc_id_label), 'Illegal doc ID label: %s' % (rzdoc_id_label) # validate doc label q_type = dbq.query_struct_type c_set = [] # clause set @@ -120,7 +122,7 @@ class QT_Node_Filter__Doc_ID_Label(Query_Transformation): if isinstance(n, e_ident) and n.parent.__class__ in [p_node]: lbl_set = n.spawn_sibling__adjacent(e_label_set) lbl = lbl_set.spawn_child(e_value) - lbl.value = doc_id_label + lbl.value = rzdoc_id_label for p_exp in p_node_or_path_set: p_exp.tree_walk__pre(f_visit=f_visit) @@ -129,7 +131,7 @@ class QT_Node_Filter__Doc_ID_Label(Query_Transformation): for lbl_set in set_of_lbl_set: if isinstance(lbl_set.parent, p_node): lbl = lbl_set.spawn_child(e_value) - lbl.value = doc_id_label + lbl.value = rzdoc_id_label # log.debug('db_q trans: in clause: %s, out clause: %s' % (cur_clause, new_clause)) diff --git a/src/server/rz_api_rest.py b/src/server/rz_api_rest.py index ac3a5c6e..b3d5dc40 100644 --- a/src/server/rz_api_rest.py +++ b/src/server/rz_api_rest.py @@ -30,7 +30,7 @@ log = logging.getLogger('rhizi') db_ctl = None # injected: DB controller -def __context__common(): +def __context__common(rzdoc_id=None): """ build a common rquest context to pass along with a kernel diff commit: - set user_name @@ -40,6 +40,7 @@ def __context__common(): if session.has_key('username'): ret['user_name'] = session['username'] + ret['rzdoc_id'] = rzdoc_id return ret def rzdoc__new(): @@ -66,18 +67,20 @@ def diff_commit__topo(): - handle success/error outcomes """ def sanitize_input(req): + rzdoc_name = request.get_json().get('rzdoc_name') topo_diff_dict = request.get_json()['topo_diff'] topo_diff = Topo_Diff.from_json_dict(topo_diff_dict) sanitize_input__topo_diff(topo_diff) - return topo_diff; + return rzdoc_name, topo_diff try: - topo_diff = sanitize_input(request) + rzdoc_name, topo_diff = sanitize_input(request) except Exception as e: return common_resp_handle(error='malformed input') - ctx = __context__common() + rzdoc_id = map_rzdoc_name_to_rzdoc_id(rzdoc_name) + ctx = __context__common(rzdoc_id=rzdoc_id) try: kernel = flask.current_app.kernel _, commit_ret = kernel.diff_commit__topo(topo_diff, ctx) @@ -92,23 +95,26 @@ def diff_commit__attr(): commit a graph attribute diff """ def sanitize_input(req): + rzdoc_name = request.get_json().get('rzdoc_name') attr_diff_dict = request.get_json()['attr_diff'] attr_diff = Attr_Diff.from_json_dict(attr_diff_dict) sanitize_input__attr_diff(attr_diff) - return attr_diff; + + return rzdoc_name, attr_diff; def on_error(e): # handle DB ERRORS, eg. name attr change error return common_resp_handle(error='error occurred') try: - attr_diff = sanitize_input(request) + rzdoc_name, attr_diff = sanitize_input(request) validate_obj__attr_diff(attr_diff) except Exception as e: return common_resp_handle(error='malformed input') - ctx = __context__common() + rzdoc_id = map_rzdoc_name_to_rzdoc_id(rzdoc_name) + ctx = __context__common(rzdoc_id=rzdoc_id) try: kernel = flask.current_app.kernel _, commit_ret = kernel.diff_commit__attr(attr_diff, ctx) |
