Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

整理: 情報機能を API Router でモジュール化 #1192

Merged
merged 4 commits into from
May 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 4 additions & 29 deletions run.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import argparse
import asyncio
import json
import multiprocessing
import os
import sys
Expand Down Expand Up @@ -29,6 +28,7 @@
from voicevox_engine.app.middlewares import configure_middlewares
from voicevox_engine.app.openapi_schema import configure_openapi_schema
from voicevox_engine.app.routers import (
engine_info,
preset,
setting,
speaker,
Expand All @@ -38,7 +38,6 @@
from voicevox_engine.cancellable_engine import CancellableEngine
from voicevox_engine.core.core_adapter import CoreAdapter
from voicevox_engine.core.core_initializer import initialize_cores
from voicevox_engine.engine_manifest.EngineManifest import EngineManifest
from voicevox_engine.engine_manifest.EngineManifestLoader import EngineManifestLoader
from voicevox_engine.library_manager import LibraryManager
from voicevox_engine.metas.Metas import StyleId
Expand All @@ -49,7 +48,6 @@
InstalledLibraryInfo,
MorphableTargetInfo,
StyleIdNotFoundError,
SupportedDevicesInfo,
)
from voicevox_engine.morphing import (
get_morphable_targets,
Expand Down Expand Up @@ -295,17 +293,6 @@ def _synthesis_morphing(

app.include_router(preset.generate_router(preset_manager))

@app.get("/version", tags=["その他"])
async def version() -> str:
return __version__

@app.get("/core_versions", response_model=list[str], tags=["その他"])
async def core_versions() -> Response:
return Response(
content=json.dumps(list(cores.keys())),
media_type="application/json",
)

app.include_router(speaker.generate_router(get_core, metas_store, root_dir))

if engine_manifest_data.supported_features.manage_library:
Expand Down Expand Up @@ -388,21 +375,9 @@ def uninstall_library(

app.include_router(user_dict.generate_router())

@app.get("/supported_devices", response_model=SupportedDevicesInfo, tags=["その他"])
def supported_devices(
core_version: str | None = None,
) -> Response:
supported_devices = get_core(core_version).supported_devices
if supported_devices is None:
raise HTTPException(status_code=422, detail="非対応の機能です。")
return Response(
content=supported_devices,
media_type="application/json",
)

@app.get("/engine_manifest", response_model=EngineManifest, tags=["その他"])
async def engine_manifest() -> EngineManifest:
return engine_manifest_data
app.include_router(
engine_info.generate_router(get_core, cores, engine_manifest_data)
)

app.include_router(
setting.generate_router(
Expand Down
51 changes: 51 additions & 0 deletions voicevox_engine/app/routers/engine_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
"""エンジンの情報機能を提供する API Router"""

import json
from typing import Callable

from fastapi import APIRouter, HTTPException, Response

from voicevox_engine import __version__
from voicevox_engine.core.core_adapter import CoreAdapter
from voicevox_engine.engine_manifest.EngineManifest import EngineManifest
from voicevox_engine.model import SupportedDevicesInfo


def generate_router(
get_core: Callable[[str | None], CoreAdapter],
cores: dict[str, CoreAdapter],
engine_manifest_data: EngineManifest,
) -> APIRouter:
"""エンジン情報 API Router を生成する"""
router = APIRouter()

@router.get("/version", tags=["その他"])
async def version() -> str:
return __version__

@router.get("/core_versions", response_model=list[str], tags=["その他"])
async def core_versions() -> Response:
return Response(
content=json.dumps(list(cores.keys())),
media_type="application/json",
)

@router.get(
"/supported_devices", response_model=SupportedDevicesInfo, tags=["その他"]
)
def supported_devices(
core_version: str | None = None,
) -> Response:
supported_devices = get_core(core_version).supported_devices
if supported_devices is None:
raise HTTPException(status_code=422, detail="非対応の機能です。")
return Response(
content=supported_devices,
media_type="application/json",
)

@router.get("/engine_manifest", response_model=EngineManifest, tags=["その他"])
async def engine_manifest() -> EngineManifest:
return engine_manifest_data

return router