From 9d2fbc2755690c9b2a1b8350ad4e093cd8003add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=B5=E3=81=81?= Date: Sun, 21 May 2023 13:34:29 +0900 Subject: [PATCH] add schemas hooks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ふぁ --- tools/build.py | 15 ++++++++++----- tools/build_config.py | 4 ++++ tools/hooks.py | 15 +++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/tools/build.py b/tools/build.py index b6e720f..7117546 100644 --- a/tools/build.py +++ b/tools/build.py @@ -6,7 +6,7 @@ import shutil import copy import re from build_config import Config -from hooks import OpenapiHookBase, RequestHookBase +from hooks import OpenapiHookBase, RequestHookBase, SchemasHookBase from tqdm import tqdm @@ -21,7 +21,7 @@ try: except: pass -for lang in tqdm(config.main().keys(), leave=False): +for lang, profile in tqdm(config.main().items(), leave=False): dist_replace = lambda x: x.replace( config.INPUT_DIR, config.OUTPUT_DIR.format(lang), 1 ) @@ -39,7 +39,7 @@ for lang in tqdm(config.main().keys(), leave=False): for method in list(load["paths"][path]): for tag in list(load["paths"][path][method].get("tags", ["default"])): key, value = path, load["paths"][path][method] - for hook in config.main()[lang]["request"][tag]: + for hook in profile["request"][tag]: hook: RequestHookBase key, value = hook.hook(key, value) load["paths"][path][method] = value @@ -48,7 +48,12 @@ for lang in tqdm(config.main().keys(), leave=False): escape = key.replace("/", "~1") relative = file.replace(config.INPUT_DIR, "", 1) paths.update({key: {"$ref": f".{relative}#/paths/{escape}"}}) - + for name in list(load.get("components", {}).get("schemas", {})): + value = load["components"]["schemas"][name] + for hook in profile["schemas"]: + hook: SchemasHookBase + value = hook.hook(value) + load["components"]["schemas"][name] = value with open(dist_replace(file), mode="w+", encoding="utf-8") as f: f.write(yaml.dump(load)) @@ -57,7 +62,7 @@ for lang in tqdm(config.main().keys(), leave=False): openapi = yaml.safe_load(f) for path in paths: openapi["paths"] = paths - for hook in config.main()[lang]["openapi"]: + for hook in profile["openapi"]: hook: OpenapiHookBase openapi = hook.hook(openapi) with open(dist_replace(file), mode="w+", encoding="utf-8") as f: diff --git a/tools/build_config.py b/tools/build_config.py index ea98d26..5280d44 100644 --- a/tools/build_config.py +++ b/tools/build_config.py @@ -9,6 +9,7 @@ class Config: return { "docs": { "openapi": [AddSecuritySchemesOnSecuritySchemes()], + "schemas": [], "request": { key: [ ReplaceQueryIdPlaceholder(split=-1), @@ -55,6 +56,7 @@ class Config: }, "dart": { "openapi": [], + "schemas": [], "request": { key: [ ReplaceQueryIdPlaceholder(split=-1), @@ -107,6 +109,7 @@ class Config: }, "typescript": { "openapi": [AddSecuritySchemesOnSecuritySchemes()], + "schemas": [RemoveDiscriminator()], "request": { key: [ ReplaceQueryIdPlaceholder(split=-1), @@ -143,6 +146,7 @@ class Config: }, "test": { "openapi": [AddSecuritySchemesOnSecuritySchemes()], + "schemas": [], "request": { key: [ ReplaceQueryIdPlaceholder(split=-1), diff --git a/tools/hooks.py b/tools/hooks.py index 537cb59..3ead893 100644 --- a/tools/hooks.py +++ b/tools/hooks.py @@ -58,6 +58,11 @@ class OpenapiHookBase(HookBase): return value +class SchemasHookBase(HookBase): + def hook(self, value: dict): + return value + + class RequestHookBase(HookBase): split: int path_name: str @@ -84,6 +89,16 @@ class AddSecuritySchemesOnSecuritySchemes(OpenapiHookBase): return value +# SchemasHookBase extends + + +class RemoveDiscriminator(SchemasHookBase): + def hook(self, value: dict): + if value.get("discriminator") is not None: + del value["discriminator"] + return value + + # RequestHookBase extends