summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2014-10-15 22:12:56 +0200
committerLV-426 <lv-426@taproot.org.il>2014-10-15 22:12:56 +0200
commitdcbc18c61d0917008c09c7a15ec57045641a9bce (patch)
tree224e8270b81ac3a2d67e161eb5b3d62c92b1b15f
parent3d0306271a427f7a2e47aea18429c1cad8e74bee (diff)
DBO_attr_diff_commit & test - todo: parse DB response
-rw-r--r--src-py/db_controller.py24
-rw-r--r--src-py/test_db_controller.py15
2 files changed, 39 insertions, 0 deletions
diff --git a/src-py/db_controller.py b/src-py/db_controller.py
index 8e87d9d8..49ed3b6b 100644
--- a/src-py/db_controller.py
+++ b/src-py/db_controller.py
@@ -123,6 +123,30 @@ class DBO_topo_diff_commit(DB_composed_op):
self.add_sub_op(op_n_add)
self.add_sub_op(op_l_add)
+ def on_completion(self, data):
+ pass
+
+class DBO_attr_diff_commit(DB_op):
+ """
+ commit a Attr_Diff
+ """
+ def __init__(self, attr_diff):
+ super(DBO_attr_diff_commit, self).__init__()
+
+ for id_attr, n_attr_diff in attr_diff.items():
+ # TODO parameterize multiple attr removal
+ rm_attr_set = n_attr_diff['attr_remove']
+ rm_attr_str = ', '.join(['n.' + attr for attr in rm_attr_set])
+
+ q = ("match (n {id: {id}}) " +
+ "set n += {attr_set}" +
+ "remove " + rm_attr_str +
+ " return n.id, n")
+ q_param_set = {'id': id_attr,
+ 'attr_set': n_attr_diff['attr_write']}
+ self.add_statement(q, q_param_set)
+
+ def on_completion(self, data):
pass
class DBO_add_node_set(DB_op):
diff --git a/src-py/test_db_controller.py b/src-py/test_db_controller.py
index 254afb80..66ecfd09 100644
--- a/src-py/test_db_controller.py
+++ b/src-py/test_db_controller.py
@@ -193,6 +193,21 @@ class TestDBController(unittest.TestCase):
id_set = self.db_ctl.exec_op(dbc.DBO_match_link_set_by_src_or_dst_id_attributes(src_id=n_1_id, dst_id=n_0_id))
self.assertEqual(len(id_set), 1)
+ def test_attr_diff_commit(self):
+ # create test node
+ n_id = rand_id()
+ topo_diff = Topo_Diff(node_set_add=[{'__type': 'T_test_attr_diff_commit', 'id': n_id, 'attr_rm': 0}])
+ op = dbc.DBO_topo_diff_commit(topo_diff)
+ self.db_ctl.exec_op(op)
+
+ # apply attr_diff
+ attr_diff = {n_id: {'attr_write': {'attr_0': 0,
+ 'attr_1': 'a'},
+ 'attr_remove': ['attr_rm']}}
+ op = dbc.DBO_attr_diff_commit(attr_diff)
+ n_set = self.db_ctl.exec_op(op)
+ pass
+
def tearDown(self): pass
if __name__ == "__main__":