mirror of
https://github.com/Telecominfraproject/OpenNetworkLinux.git
synced 2025-11-02 19:28:18 +00:00
87 lines
2.4 KiB
Python
Executable File
87 lines
2.4 KiB
Python
Executable File
#!/usr/bin/python2
|
|
############################################################
|
|
#
|
|
# Simple JSON Generator
|
|
#
|
|
############################################################
|
|
import argparse
|
|
import yaml
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
|
|
def setkeypath(d, kvt):
|
|
"""Set a key tree to a value in the given dict.
|
|
|
|
The key tree is specified as k1.k2..kN-1.kN"""
|
|
|
|
(key, value) = kvt
|
|
ktree = key.split('.')
|
|
for k in ktree:
|
|
if k == ktree[-1]:
|
|
d[k] = value
|
|
return
|
|
elif k not in d:
|
|
d[k] = {}
|
|
|
|
d = d[k]
|
|
|
|
|
|
ap=argparse.ArgumentParser(description="Simple JSON Generator.")
|
|
|
|
ap.add_argument("--in", metavar='FILENAME', help="Load json source data.", dest='_in')
|
|
ap.add_argument("--kj", nargs=2, metavar=('KEY', 'FILE|STR'), help="Add json data.")
|
|
ap.add_argument("--ky", nargs=2, metavar=('KEY', 'FILE|STR'), help="Add yaml jdata.")
|
|
ap.add_argument("--kv", nargs=2, metavar=('KEY', 'VALUE'), help="Add key/value pair.")
|
|
ap.add_argument("--kl", nargs='+', metavar=('KEY', 'ENTRY'), help="Add key/list pair.")
|
|
ap.add_argument("--out", metavar='FILENAME', help="Write output to the given file. The default is stdout")
|
|
ap.add_argument("--indent", nargs=1, help="Json output indentation value. Default is 2", default=2)
|
|
ap.add_argument("--no-nl", action='store_true', help="No newline at the end of the output.")
|
|
ap.add_argument("--inout", metavar='FILENAME', help="Modify. Equivalent to --in FILENAME --out FILENAME")
|
|
ops = ap.parse_args();
|
|
|
|
if ops.inout:
|
|
ops._in = ops.inout
|
|
ops.out = ops.inout
|
|
|
|
g_data={}
|
|
|
|
if ops._in:
|
|
try:
|
|
g_data = yaml.load(open(ops._in))
|
|
except:
|
|
g_data = json.load(open(ops._in))
|
|
|
|
if ops.kj:
|
|
(k, j) = ops.kj
|
|
if os.path.exists(j):
|
|
v = json.load(open(j))
|
|
else:
|
|
v = json.loads(j)
|
|
setkeypath(g_data, (k, v))
|
|
|
|
if ops.ky:
|
|
(k, y) = ops.ky
|
|
if os.path.exists(y):
|
|
v = yaml.load(open(y))
|
|
else:
|
|
v = yaml.load(y)
|
|
setkeypath(g_data, (k, v))
|
|
|
|
if ops.kv:
|
|
setkeypath(g_data, ops.kv)
|
|
|
|
if ops.kl:
|
|
k = ops.kl.pop(0)
|
|
setkeypath(g_data, (k, ops.kl))
|
|
|
|
out=sys.stdout
|
|
if ops.out and ops.out not in ['-', 'stdout']:
|
|
print ops.out
|
|
out = open(ops.out, "w")
|
|
|
|
json.dump(g_data, out, indent=ops.indent)
|
|
if not ops.no_nl:
|
|
out.write('\n')
|