summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/local/neo4j-cypher34
-rw-r--r--src/local/rhizi_tools_neo4j.py43
2 files changed, 77 insertions, 0 deletions
diff --git a/src/local/neo4j-cypher b/src/local/neo4j-cypher
new file mode 100755
index 00000000..c2aee707
--- /dev/null
+++ b/src/local/neo4j-cypher
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+
+import json
+import sys
+import time
+import argparse
+
+help = """Welcome to neo4j-cypher, a tool to submit cypher queries to neo4j
+This tool follows the neo4j REST API and allows submitting queries from command
+line or standard in without using neo4j-shell since that doesn't work on all machines.
+It relies on curl right now although this could be replaced with straight python.
+"""
+
+import rhizi_tools_neo4j
+
+def main(statements):
+ one_at_a_time = False
+ if len(statements) == 0:
+ statements = [l.strip() for l in sys.stdin.readlines() if l.strip()[:2] != '//' and l.strip() != ""]
+ one_at_a_time = True
+ print("----------------------------------------------------------------------")
+ print "\n".join(statements)
+ print("----------------------------------------------------------------------")
+ results = rhizi_tools_neo4j.run(statements=statements, one_at_a_time=one_at_a_time)
+ for result in results:
+ json.dump(result, sys.stdout, sort_keys=True, indent=4, separators=(',', ': '))
+ print()
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description=help, add_help=True)
+ parser.add_argument('--verbose', action='store_true', default=False)
+ args, statements = parser.parse_known_args(sys.argv[1:])
+ verbose = args.verbose
+ main(statements)
diff --git a/src/local/rhizi_tools_neo4j.py b/src/local/rhizi_tools_neo4j.py
new file mode 100644
index 00000000..be8b4a5d
--- /dev/null
+++ b/src/local/rhizi_tools_neo4j.py
@@ -0,0 +1,43 @@
+import subprocess
+import re
+import json
+
+verbose = False
+
+BASE="http://rhizi.local:7474/db/data"
+
+def c(cmd, incoming=None):
+ if verbose:
+ print("executing %r" % cmd)
+ print(incoming)
+ p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ if incoming:
+ p.stdin.write(incoming)
+ if p.stdin:
+ p.stdin.close()
+ p.wait()
+ ret = p.stdout.read()
+ return ret
+
+def curl(path, incoming):
+ return c(["curl", "-H", 'Accept: application/json', "-H", 'Content-Type: application/json', '-XPOST', '-d@-', path],
+ incoming=incoming)
+
+def transact(datum):
+ transaction_output = curl(BASE + "/transaction/", '{"statements": [ ] }')
+ commit = re.search("http://.*commit", transaction_output).group()
+ ret = curl(commit, json.dumps(datum))
+ obj = json.loads(ret)
+ return obj
+
+def run(statements, one_at_a_time):
+ def single_request_data(statements):
+ return {'statements': [{'statement': s} for s in statements]}
+ results = []
+ if one_at_a_time:
+ data = [single_request_data([statement]) for statement in statements]
+ else:
+ data = [single_request_data(statements)]
+ for datum in data:
+ results.append(transact(datum))
+ return results