Skip to content

Commit 6a3b0b4

Browse files
committed
More CLI fixes
1 parent 9c1a5b9 commit 6a3b0b4

File tree

1 file changed

+37
-25
lines changed

1 file changed

+37
-25
lines changed

neo4j/__main__.py

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import logging
2525
from argparse import ArgumentParser
26+
from getpass import getpass
2627
from json import loads as json_loads
2728
from sys import stdout, stderr
2829

@@ -35,13 +36,14 @@
3536
def main():
3637
parser = ArgumentParser(description="Execute one or more Cypher statements using Bolt.")
3738
parser.add_argument("statement", nargs="+")
38-
parser.add_argument("-i", "--insecure", action="store_true")
39-
parser.add_argument("-k", "--keys", action="store_true")
39+
parser.add_argument("-H", "--header", action="store_true")
4040
parser.add_argument("-P", "--password")
4141
parser.add_argument("-p", "--parameter", action="append", metavar="NAME=VALUE")
4242
parser.add_argument("-q", "--quiet", action="store_true")
43+
parser.add_argument("-r", "--read-only", action="store_true")
44+
parser.add_argument("-s", "--secure", action="store_true")
4345
parser.add_argument("-U", "--user", default="neo4j")
44-
parser.add_argument("-u", "--url", default="bolt://localhost:7687", metavar="CONNECTION_URL")
46+
parser.add_argument("-u", "--uri", default="bolt://", metavar="CONNECTION_URI")
4547
parser.add_argument("-v", "--verbose", action="count")
4648
parser.add_argument("-x", "--times", type=int, default=1)
4749
parser.add_argument("-z", "--summary", action="store_true")
@@ -62,28 +64,38 @@ def main():
6264
except ValueError:
6365
parameters[name] = value
6466

65-
driver = GraphDatabase.driver(args.url, auth=(args.user, args.password), encrypted=not args.insecure)
66-
session = driver.session()
67-
for _ in range(args.times):
68-
for statement in args.statement:
69-
try:
70-
result = session.run(statement, parameters)
71-
except CypherError as error:
72-
stderr.write("%s: %s\r\n" % (error.code, error.message))
73-
else:
74-
if not args.quiet:
75-
if args.keys:
76-
stdout.write("%s\r\n" % "\t".join(result.keys()))
77-
for i, record in enumerate(result):
78-
stdout.write("%s\r\n" % "\t".join(map(repr, record.values())))
79-
if args.summary:
80-
summary = result.summary
81-
stdout.write("Statement : %r\r\n" % summary.statement)
82-
stdout.write("Parameters : %r\r\n" % summary.parameters)
83-
stdout.write("Statement Type : %r\r\n" % summary.statement_type)
84-
stdout.write("Counters : %r\r\n" % summary.counters)
85-
stdout.write("\r\n")
86-
session.close()
67+
try:
68+
password = args.password or getpass()
69+
except KeyboardInterrupt:
70+
exit(0)
71+
else:
72+
with GraphDatabase.driver(args.uri, auth=(args.user, password), encrypted=args.secure) as driver:
73+
with driver.session() as session:
74+
75+
run = session.read_transaction if args.read_only else session.write_transaction
76+
77+
for _ in range(args.times):
78+
for statement in args.statement:
79+
80+
def work(tx, p):
81+
result = tx.run(statement, p)
82+
if not args.quiet:
83+
if args.header:
84+
stdout.write("%s\r\n" % "\t".join(result.keys()))
85+
for i, record in enumerate(result):
86+
stdout.write("%s\r\n" % "\t".join(map(repr, record.values())))
87+
if args.summary:
88+
summary = result.summary()
89+
stdout.write("Statement : %r\r\n" % summary.statement)
90+
stdout.write("Parameters : %r\r\n" % summary.parameters)
91+
stdout.write("Statement Type : %r\r\n" % summary.statement_type)
92+
stdout.write("Counters : %r\r\n" % summary.counters)
93+
stdout.write("\r\n")
94+
95+
try:
96+
run(work, parameters)
97+
except CypherError as error:
98+
stderr.write("%s: %s\r\n" % (error.code, error.message))
8799

88100

89101
if __name__ == "__main__":

0 commit comments

Comments
 (0)