44from argparse import ArgumentParser
55from csv import DictWriter
66from sys import stdout
7+ from typing import List , Literal
78from json import dumps
89
910
@@ -13,9 +14,23 @@ def query(code: str, workdir: Path, ctx: dict):
1314 return result
1415
1516
17+ def print_result (result : List [dict ], format : Literal ["json" , "csv" ]):
18+ if format == "json" :
19+ print (dumps (result , indent = 2 ))
20+ elif format == "csv" :
21+ if len (result ) == 0 :
22+ print ("No results to write to CSV." )
23+ else :
24+ keys = result [0 ].keys ()
25+ writer = DictWriter (stdout , fieldnames = keys )
26+ writer .writeheader ()
27+ for row in result :
28+ writer .writerow (row )
29+
30+
1631if __name__ == "__main__" :
1732 parser = ArgumentParser (description = "Run SQL queries on JSON files." )
18- parser .add_argument ("code" , type = str , help = "SQL query to execute" )
33+ parser .add_argument ("-- code" , type = str , help = "SQL query to execute" , default = None )
1934 parser .add_argument (
2035 "--workdir" ,
2136 type = Path ,
@@ -37,16 +52,25 @@ def query(code: str, workdir: Path, ctx: dict):
3752 )
3853 args = parser .parse_args ()
3954
40- result = query (code = args .code , workdir = args .workdir , ctx = {})
41-
42- if args .format == "json" :
43- print (dumps (result , indent = 2 ))
44- elif args .format == "csv" :
45- if len (result ) == 0 :
46- print ("No results to write to CSV." )
47- else :
48- keys = result [0 ].keys ()
49- writer = DictWriter (stdout , fieldnames = keys )
50- writer .writeheader ()
51- for row in result :
52- writer .writerow (row )
55+ if args .code :
56+ result = query (code = args .code , workdir = args .workdir , ctx = {})
57+ print_result (result = result , format = args .format )
58+ else :
59+ print ("JSON SQL CLI" )
60+ print ("Type 'exit' to quit." )
61+ while True :
62+ try :
63+ code = input ("> " )
64+ if code .lower () == "exit" :
65+ break
66+ result = query (code = code , workdir = args .workdir , ctx = {})
67+ print_result (result = result , format = args .format )
68+ except KeyboardInterrupt :
69+ break
70+ except EOFError :
71+ break
72+ except SystemExit :
73+ break
74+ except Exception as e :
75+ print (f"Error: { e } " )
76+ continue
0 commit comments