mirror of
				https://github.com/Telecominfraproject/ols-ucentral-schema.git
				synced 2025-10-31 18:17:45 +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()
 | 
