tools/template_optimizer.py (46 lines of code) (raw):
# coding=utf-8
# ----------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License file in the project root for license information.
# ----------------------------------------------------------------------------------------------
import json
import sys
from ast import literal_eval
from subprocess import run
from unittest import TestCase
def process_template(input_template_path: str, output_format: str = "json"):
if output_format not in ["json", "python"]:
raise ValueError(f"Unsupported output format: {output_format}")
with open(input_template_path, "r") as content:
data = json.load(content)
if "parameters" in data:
for parameter in data["parameters"]:
if "metadata" in data["parameters"][parameter]:
if (
"description" in data["parameters"][parameter]["metadata"]
and len(data["parameters"][parameter]["metadata"]) == 1
):
del data["parameters"][parameter]["metadata"]
if parameter in ["clusterLocation", "location"]:
if "allowedValues" in data["parameters"][parameter]:
del data["parameters"][parameter]["allowedValues"]
# TODO - @digimaun
# if "outputs" in data:
# del data["outputs"]
output_ext = "json" if output_format == "json" else "py"
output_template_path = f"./optimized.{output_ext}"
with open(output_template_path, "w") as write_file:
if output_format == "json":
write_file.write(json.dumps(data, indent=2))
elif output_format == "python":
write_file.write(str(data))
write_file.close()
run(f"black {output_template_path} --line-length=119 --target-version=py38", check=True)
# Test serialized content
with open(output_template_path, "r") as read_file:
content = read_file.read()
if output_format == "json":
payload_to_integrate = json.loads(content)
elif output_format == "python":
payload_to_integrate = literal_eval(content)
assert payload_to_integrate == data
TestCase().assertDictEqual(data, payload_to_integrate)
print("Expected data assertions passed!")
if __name__ == "__main__":
len_argv = len(sys.argv)
if len_argv < 2 or len_argv > 3:
print("Usage: python template_optimizer.py <input path to template.json> [output file format (json,python)]")
raise sys.exit(1)
process_template(*sys.argv[1:])
sys.exit(0)