From 3935862eec00059ea8e5f87455e2fa388e383521 Mon Sep 17 00:00:00 2001 From: tarepan Date: Fri, 22 Dec 2023 12:20:33 +0900 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86:=20API=E3=83=89=E3=82=AD?= =?UTF-8?q?=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88=E7=94=9F=E6=88=90=E3=82=B3?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E6=AE=B5=E9=9A=8E=E5=8C=96=20(#865)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refactor: APIドキュメント生成コードの段階化 * Fix: lint * Refactor: `Path` ベースファイル保存への変更 * Fix: lint --- .github/workflows/upload-gh-pages.yml | 2 ++ build_util/make_docs.py | 48 ++++++++++++++++++--------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/.github/workflows/upload-gh-pages.yml b/.github/workflows/upload-gh-pages.yml index e545c0bf6..3efc702b4 100644 --- a/.github/workflows/upload-gh-pages.yml +++ b/.github/workflows/upload-gh-pages.yml @@ -1,3 +1,5 @@ +# API docs HTML ファイルを生成し、`gh-pages` ブランチへの push によって GitHub Pages 上のドキュメントとして公開 + name: upload-docs on: diff --git a/build_util/make_docs.py b/build_util/make_docs.py index 7bf1f0b6e..ad7135e5d 100644 --- a/build_util/make_docs.py +++ b/build_util/make_docs.py @@ -1,4 +1,5 @@ import json +from pathlib import Path from voicevox_engine.dev.core import mock as core from voicevox_engine.dev.synthesis_engine.mock import MockTTSEngine @@ -6,20 +7,12 @@ from voicevox_engine.setting import USER_SETTING_PATH, SettingLoader from voicevox_engine.utility import engine_root -if __name__ == "__main__": - import run - app = run.generate_app( - synthesis_engines={"mock": MockTTSEngine(speakers=core.metas())}, - latest_core_version="mock", - setting_loader=SettingLoader(USER_SETTING_PATH), - preset_manager=PresetManager( # FIXME: impl MockPresetManager - preset_path=engine_root() / "presets.yaml", - ), - ) - with open("docs/api/index.html", "w") as f: - f.write( - """ +def generate_api_docs_html(schema: str) -> str: + """OpenAPI schema から API ドキュメント HTML を生成する""" + + return ( + """ voicevox_engine API Document @@ -34,5 +27,30 @@ """ - % json.dumps(app.openapi()) - ) + % schema + ) + + +if __name__ == "__main__": + + import run + + # FastAPI の機能を用いて OpenAPI schema を生成する + app = run.generate_app( + synthesis_engines={"mock": MockTTSEngine(speakers=core.metas())}, + latest_core_version="mock", + setting_loader=SettingLoader(USER_SETTING_PATH), + preset_manager=PresetManager( # FIXME: impl MockPresetManager + preset_path=engine_root() / "presets.yaml", + ), + ) + api_schema = json.dumps(app.openapi()) + + # API ドキュメント HTML を生成する + api_docs_html = generate_api_docs_html(api_schema) + + # HTML ファイルとして保存する + api_docs_root = Path("docs/api") # 'upload-docs' workflow の対象 + output_path = api_docs_root / "index.html" + output_path.parent.mkdir(parents=True, exist_ok=True) + output_path.write_text(api_docs_html)