mirror of
https://github.com/Telecominfraproject/ols-ucentral-schema.git
synced 2025-10-28 16:52:20 +00:00
69 lines
2.2 KiB
Python
Executable File
69 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import sys
|
|
import yaml
|
|
import json
|
|
|
|
def schema_filename(list):
|
|
file = list.split("v1/")
|
|
file.pop(0)
|
|
return file[0].replace("/", ".") + "yml"
|
|
|
|
def entity_name(uri):
|
|
name = uri.replace("https://ucentral.io/" + sys.argv[1] + "/v1/", "").rstrip("/")
|
|
return name.replace("/", ".")
|
|
|
|
def schema_load(filename):
|
|
print(sys.argv[2] + "/" + filename)
|
|
with open(sys.argv[2] + "/" + filename) as stream:
|
|
try:
|
|
schema = yaml.safe_load(stream)
|
|
return schema
|
|
except yaml.YAMLError as exc:
|
|
print(exc)
|
|
|
|
def schema_compile(input, output, definitions, tiny, refs):
|
|
for k in input:
|
|
if tiny and (k == "description" or k == "uc-example"):
|
|
continue
|
|
if isinstance(input[k], dict):
|
|
if k not in output:
|
|
output[k] = {}
|
|
schema_compile(input[k], output[k], definitions, tiny, refs)
|
|
elif k == "$ref" and input[k].startswith("https://"):
|
|
name = entity_name(input[k])
|
|
compiled = schema_compile(schema_load(schema_filename(input[k])), {}, definitions, tiny, refs)
|
|
if refs:
|
|
definitions[name] = compiled
|
|
output["$ref"] = "#/$defs/{}".format(name)
|
|
else:
|
|
for i in compiled:
|
|
output[i] = compiled[i]
|
|
elif k == "$ref" and not tiny:
|
|
output["properties"] = {"reference": {"type": "string"}}
|
|
elif k == "anyOf" or k == "oneOf" or k == "allOf":
|
|
r = []
|
|
for v in input[k]:
|
|
o = {}
|
|
schema_compile(v, o, definitions, tiny, refs)
|
|
r.append(o)
|
|
output[k] = r
|
|
else:
|
|
output[k] = input[k]
|
|
return output
|
|
|
|
def schema_generate():
|
|
with open(sys.argv[4], 'w') as outfile:
|
|
tiny = int(sys.argv[5])
|
|
refs = int(sys.argv[6])
|
|
defs = {}
|
|
schema = schema_compile(schema_load(sys.argv[3]), {}, defs, tiny, refs)
|
|
if refs:
|
|
schema["$defs"] = defs
|
|
json.dump(schema, outfile, ensure_ascii = tiny and False or True, indent = tiny and 0 or 4)
|
|
|
|
if len(sys.argv) != 7:
|
|
raise Exception("Invalid parameters");
|
|
|
|
schema_generate()
|