From a69d2fa7d8ac2a8fbaa65609bb9a1c55c08dffd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=B5=E3=81=81?= Date: Thu, 27 Apr 2023 20:07:08 +0900 Subject: [PATCH] update build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ふぁ --- tools/build.py | 89 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 79 insertions(+), 10 deletions(-) diff --git a/tools/build.py b/tools/build.py index 87e64f6..ca71029 100644 --- a/tools/build.py +++ b/tools/build.py @@ -38,6 +38,38 @@ class placeholder_manager: return file +def placeholder_to_yaml(obj): + if type(obj) is dict: + return { + "type": "object", + "required": [i for i in obj], + "properties": {i: placeholder_to_yaml(obj[i]) for i in obj}, + # "default": {i: placeholder_to_yaml(obj[i]) for i in obj}, + # "example": {i: placeholder_to_yaml(obj[i]) for i in obj}, + } + elif type(obj) is list: + if len(obj) == 0: + return { + "type": "array", + "items": {"type": "object"}, + # "default": [], + # "example": [], + } + return { + "type": "array", + "items": placeholder_to_yaml(obj[0]), + # "default": placeholder_to_yaml(obj[0]), + # "example": placeholder_to_yaml(obj[0]), + } + elif type(obj) is str: + return {"type": "string", "example": obj, "default": obj} + elif type(obj) is bool: + return {"type": "boolean", "example": obj, "default": obj} + elif type(obj) is int: + return {"type": "integer", "example": obj, "default": obj} + + +print("=== Build Start ===") OUTPUT_DIR = "dist/{0}" INPUT_DIR = "src/openapi" METHODS = ["get", "put", "post", "delete", "options", "head", "patch", "trace"] @@ -51,6 +83,8 @@ with open("src/config/variable.json", mode="r", encoding="utf-8") as f: variable = json.load(f) +placeholder = placeholder_manager() + for lang in variable.keys(): def read(file: str): @@ -84,7 +118,6 @@ for lang in variable.keys(): for dir in glob.glob(os.path.join(INPUT_DIR, "**/")): os.makedirs(dir.replace(INPUT_DIR, OUTPUT_DIR.format(lang), 1), exist_ok=True) - placeholder = placeholder_manager() parameters = read("src/config/parameters.yaml") header = read("src/config/header.yaml") @@ -98,17 +131,51 @@ for lang in variable.keys(): for key in load["paths"].keys(): append = get_yaml(parameters, key.split("/")[-1]) param = append["paths"]["/parameters"] - for method in METHODS: - if load["paths"][key].get(method, None) is not None: - req = load["paths"][key][method] - req["parameters"] = param[method]["parameters"] + for method in load["paths"][key].keys(): + req = load["paths"][key][method] - append = get_yaml(header, key.split("/")[-1]) - req = load["paths"][key][method] - req["responses"]["200"]["headers"] = append["components"]["headers"] + req["parameters"] = req.get("parameters", []) + req["parameters"] += param[method].get("parameters", []) - escape = key.replace("/", "~1") - paths.update({key: {"$ref": f".{relative}#/paths/{escape}"}}) + if param[method].get("requestBody") is not None: + req["requestBody"] = param[method].get("requestBody") + + if variable[lang].get(method + "_parameters") == "schema_parameters": + for p_key in placeholder.data[key.split("/")[-1]].keys(): + if p_key.lower() == "query": + continue + req["parameters"].append( + { + "name": p_key.lower(), + "in": "query", + "schema": placeholder_to_yaml( + placeholder.data[key.split("/")[-1]][p_key] + ), + } + ) + + if variable[lang].get(method + "_parameters") == "schema_request_body": + data = placeholder.data[key.split("/")[-1]] + schema = {i: placeholder_to_yaml(data[i]) for i in data.keys()} + + req["requestBody"] = { + "description": key.split("/")[-1] + "body", + "required": True, + "content": { + "application/json": { + "schema": { + "properties": schema, + }, + } + }, + } + + append = get_yaml(header, key.split("/")[-1]) + req = load["paths"][key][method] + req["responses"]["200"]["headers"] = append["components"]["headers"] + + escape = key.replace("/", "~1") + paths.update({key: {"$ref": f".{relative}#/paths/{escape}"}}) write(file, yaml.dump(load)) file = "src/openapi/openapi-3.0.yaml" @@ -118,3 +185,5 @@ for lang in variable.keys(): load["paths"] = paths write(file, yaml.dump(load)) + +print("=== Build End ===")