mirror of
				https://github.com/Telecominfraproject/ols-ucentral-schema.git
				synced 2025-11-03 19:47:49 +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()
 |