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

追加: デフォルトプリセット機能を削除しプリセット保存先を指定する機能へ変更 #1323

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
## Artifact of generating licenses
/licenses.json
licenses_venv/
## Presets
presets.yaml

# Copied from `https://github.com/github/gitignore/blob/main/Python.gitignore` @2022-01-10
# Byte-compiled / optimized / DLL files
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ COPY --from=download-onnxruntime-env /opt/onnxruntime /opt/onnxruntime
# Add local files
ADD ./voicevox_engine /opt/voicevox_engine/voicevox_engine
ADD ./docs /opt/voicevox_engine/docs
ADD ./run.py ./presets.yaml ./engine_manifest.json /opt/voicevox_engine/
ADD ./run.py ./engine_manifest.json /opt/voicevox_engine/
ADD ./resources /opt/voicevox_engine/resources
ADD ./tools/generate_licenses.py /opt/voicevox_engine/tools/
ADD ./tools/licenses /opt/voicevox_engine/tools/licenses
Expand Down
12 changes: 0 additions & 12 deletions presets.yaml

This file was deleted.

5 changes: 2 additions & 3 deletions run.py
Original file line number Diff line number Diff line change
Expand Up @@ -336,11 +336,10 @@ def main() -> None:
env_preset_path = Path(env_preset_path_str)
else:
env_preset_path = None
root_preset_path = engine_root() / "presets.yaml"
default_preset_path = engine_root() / "presets.yaml"
preset_path = select_first_not_none(
[args.preset_file, env_preset_path, root_preset_path]
[args.preset_file, env_preset_path, default_preset_path]
)
# ファイルの存在に関わらず指定されたパスをプリセットファイルとして使用する
preset_manager = PresetManager(preset_path)

use_dict = UserDictionary()
Expand Down
1 change: 0 additions & 1 deletion run.spec
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ datas = [
('resources', 'resources'),
('engine_manifest.json', '.'),
('licenses.json', '.'),
('presets.yaml', '.'),
]
datas += collect_data_files('pyopenjtalk')

Expand Down
28 changes: 26 additions & 2 deletions test/e2e/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from typing import Any

import pytest
import yaml
from fastapi import FastAPI
from fastapi.testclient import TestClient

Expand Down Expand Up @@ -35,8 +36,9 @@ def app_params(tmp_path: Path) -> dict[str, Any]:
setting_loader = SettingHandler(tmp_path / "not_exist.yaml")

# テスト用に隔離されたプリセットを生成する
preset_path = Path("./presets.yaml")
preset_manager = PresetManager(_copy_under_dir(preset_path, tmp_path))
preset_path = tmp_path / "presets.yaml"
_generate_preset(preset_path)
preset_manager = PresetManager(preset_path)

# テスト用に隔離されたユーザー辞書を生成する
user_dict = UserDictionary(
Expand Down Expand Up @@ -75,6 +77,28 @@ def client(app: FastAPI) -> TestClient:
return TestClient(app)


def _generate_preset(preset_path: Path) -> None:
"""指定パス下にプリセットファイルを生成する。"""
contents = [
{
"id": 1,
"name": "サンプルプリセット",
"speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
"style_id": 0,
"speedScale": 1,
"pitchScale": 0,
"intonationScale": 1,
"volumeScale": 1,
"prePhonemeLength": 0.1,
"postPhonemeLength": 0.1,
"pauseLength": None,
"pauseLengthScale": 1,
}
]
with open(preset_path, mode="w", encoding="utf-8") as f:
yaml.safe_dump(contents, f, allow_unicode=True, sort_keys=False)


def _generate_user_dict(dir_path: Path) -> Path:
"""指定されたディレクトリ下にユーザー辞書ファイルを生成し、生成されたファイルのパスを返す。"""
contents = {
Expand Down
9 changes: 4 additions & 5 deletions test/unit/preset/test_preset.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,10 @@ def test_empty_file() -> None:
preset_manager.load_presets()


def test_not_exist_file() -> None:
preset_manager = PresetManager(preset_path=Path("test/presets-dummy.yaml"))
true_msg = "プリセットの設定ファイルが見つかりません"
with pytest.raises(PresetInternalError, match=true_msg):
preset_manager.load_presets()
def test_not_exist_file(tmp_path: Path) -> None:
preset_manager = PresetManager(preset_path=tmp_path / "presets-dummy.yaml")
presets = preset_manager.load_presets()
assert len(presets) == 0


def test_add_preset(tmp_path: Path) -> None:
Expand Down
5 changes: 2 additions & 3 deletions tools/make_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def generate_api_docs_html(schema: str) -> str:
core_manager.register_core(CoreAdapter(MockCoreWrapper()), "mock")
tts_engines = TTSEngineManager()
tts_engines.register_engine(MockTTSEngine(), "mock")
preset_path = engine_root() / "presets.yaml"
engine_manifest = load_manifest(engine_manifest_path())
library_manager = LibraryManager(
get_save_dir() / "installed_libraries",
Expand All @@ -61,9 +62,7 @@ def generate_api_docs_html(schema: str) -> str:
tts_engines=tts_engines,
core_manager=core_manager,
setting_loader=SettingHandler(USER_SETTING_PATH),
preset_manager=PresetManager( # FIXME: impl MockPresetManager
preset_path=engine_root() / "presets.yaml",
),
preset_manager=PresetManager(preset_path),
user_dict=UserDictionary(),
engine_manifest=engine_manifest,
library_manager=library_manager,
Expand Down
5 changes: 4 additions & 1 deletion voicevox_engine/preset/preset_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@ class PresetManager:
"""

def __init__(self, preset_path: Path):
"""プリセットの設定ファイルへのパスからプリセットマネージャーを生成する"""
"""プリセットマネージャーを生成する。プリセットファイルが存在しない場合は新規作成する。"""

self.presets: list[Preset] = [] # 全プリセットのキャッシュ
self.last_modified_time = 0.0
self.preset_path = preset_path
if not self.preset_path.exists():
self.preset_path.write_text("[]")

def _refresh_cache(self) -> None:
"""プリセットの設定ファイルの最新状態をキャッシュへ反映する"""
Expand Down