61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import json
|
|
from Cheetah.Template import Template
|
|
import glob
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description="generate.py")
|
|
parser.add_argument('--schema', '-s',
|
|
help='Schema file. Default: schema.json in the current folder.',
|
|
required=False,
|
|
default='./schema.json')
|
|
parser.add_argument('--template', '-t',
|
|
help="""Template file, templates files must be named as the final output file
|
|
with an additional .tmpl extension. Default: all template files in the current folder.""",
|
|
required=False,
|
|
default="*.tmpl")
|
|
args = parser.parse_args()
|
|
|
|
|
|
with open(args.schema) as schemaFile:
|
|
schema = json.load(schemaFile)
|
|
|
|
for table in schema["tables"]:
|
|
columns = table["columns"]
|
|
for column in columns:
|
|
if column["sqltype"] == 'serial':
|
|
column["apitype"] = 'integer'
|
|
column["jstype"] = 'number'
|
|
elif column["sqltype"] == 'integer':
|
|
column["apitype"] = 'integer'
|
|
column["jstype"] = 'number'
|
|
elif column["sqltype"] == 'date':
|
|
column["apitype"] = 'string'
|
|
column["jstype"] = 'string'
|
|
elif column["sqltype"] == 'timestamp':
|
|
column["apitype"] = 'string'
|
|
column["jstype"] = 'string'
|
|
elif column["sqltype"].startswith('varchar'):
|
|
column["apitype"] = 'string'
|
|
column["jstype"] = 'string'
|
|
elif column["sqltype"].startswith('numeric'):
|
|
column["apitype"] = 'number'
|
|
column["jstype"] = 'number'
|
|
table["selectors"] = [ y["name"] for y in sorted([ x for x in columns if "selector" in x ], key=lambda x: x["selector"])]
|
|
|
|
schema["GENERATED_SQL_COMMENT"] = """
|
|
-- THIS FILE HAS BEEN GENERATED
|
|
-- DO NOT EDIT MANUALLY
|
|
"""
|
|
schema["GENERATED_PYTHON_COMMENT"] = """
|
|
# THIS FILE HAS BEEN GENERATED
|
|
# DO NOT EDIT MANUALLY
|
|
"""
|
|
|
|
for f in glob.glob(args.template):
|
|
print(f"process {f}")
|
|
tmpl = Template(file=f, searchList=[schema])
|
|
with open(f[:-5], 'w') as outFile:
|
|
outFile.write(str(tmpl))
|
|
|
|
|