Skip to content

Commit

Permalink
整理: プリセットの public メソッド呼び出しによる内部更新を private へ変更 (#1163)
Browse files Browse the repository at this point in the history
* refactor: プリセットマネージャー関数名と実装の簡略化

* fix: placeholder 関数の型違いを修正

* revert: メソッド名変更を取り消し
  • Loading branch information
tarepan authored Apr 9, 2024
1 parent 7c625d7 commit 8f90fa6
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 58 deletions.
6 changes: 3 additions & 3 deletions test/preset/test_preset.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ def test_add_preset_write_failure(self) -> None:
}
)
preset_manager.load_presets()
preset_manager.load_presets = lambda: [] # type:ignore[method-assign]
preset_manager._refresh_cache = lambda: None # type:ignore[method-assign]
preset_manager.preset_path = "" # type: ignore[assignment]
with self.assertRaises(
PresetError, msg="プリセットの設定ファイルに書き込み失敗しました"
Expand Down Expand Up @@ -278,7 +278,7 @@ def test_update_preset_write_failure(self) -> None:
}
)
preset_manager.load_presets()
preset_manager.load_presets = lambda: [] # type:ignore[method-assign]
preset_manager._refresh_cache = lambda: None # type:ignore[method-assign]
preset_manager.preset_path = "" # type: ignore[assignment]
with self.assertRaises(
PresetError, msg="プリセットの設定ファイルに書き込み失敗しました"
Expand Down Expand Up @@ -318,7 +318,7 @@ def test_delete_preset_write_failure(self) -> None:
copyfile(presets_test_1_yaml_path, temp_path)
preset_manager = PresetManager(preset_path=temp_path)
preset_manager.load_presets()
preset_manager.load_presets = lambda: [] # type:ignore[method-assign]
preset_manager._refresh_cache = lambda: None # type:ignore[method-assign]
preset_manager.preset_path = "" # type: ignore[assignment]
with self.assertRaises(
PresetError, msg="プリセットの設定ファイルに書き込み失敗しました"
Expand Down
76 changes: 21 additions & 55 deletions voicevox_engine/preset/PresetManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,31 +17,20 @@ class PresetManager:
"""

def __init__(self, preset_path: Path):
"""
Parameters
----------
preset_path : Path
プリセット情報を一元管理するYAMLファイルへのパス
"""
self.presets: list[Preset] = []
"""プリセットの設定ファイルへのパスからプリセットマネージャーを生成する"""
self.presets: list[Preset] = [] # 全プリセットのキャッシュ
self.last_modified_time = 0.0
self.preset_path = preset_path

def load_presets(self) -> list[Preset]:
"""
既存プリセットの読み込み
Returns
-------
ret: list[Preset]
読み込まれたプリセットのリスト
"""
def _refresh_cache(self) -> None:
"""プリセットの設定ファイルの最新状態をキャッシュへ反映する"""

# データベース更新の確認(タイムスタンプベース)
try:
_last_modified_time = self.preset_path.stat().st_mtime
if _last_modified_time == self.last_modified_time:
# 更新無し、キャッシュを返す
return self.presets
# 更新無し
return
except OSError:
raise PresetError("プリセットの設定ファイルが見つかりません")

Expand All @@ -61,26 +50,15 @@ def load_presets(self) -> list[Preset]:
):
raise PresetError("プリセットのidに重複があります")

# キャッシュを更新する
self.presets = _presets
self.last_modified_time = _last_modified_time

return self.presets

def add_preset(self, preset: Preset) -> int:
"""
新規プリセットの追加
Parameters
----------
preset : Preset
新規プリセット
Returns
-------
ret: int
追加されたプリセットのID
"""
"""新規プリセットを追加し、その ID を取得する。"""

# データベース更新の反映
self.load_presets()
self._refresh_cache()

# 新規プリセットID の発行。IDが0未満、または存在するIDなら新規IDを発行
if preset.id < 0 or preset.id in {preset.id for preset in self.presets}:
Expand All @@ -100,21 +78,19 @@ def add_preset(self, preset: Preset) -> int:

return preset.id

def load_presets(self) -> list[Preset]:
"""全てのプリセットを取得する"""

# データベース更新の反映
self._refresh_cache()

return self.presets

def update_preset(self, preset: Preset) -> int:
"""
既存プリセットの更新
Parameters
----------
preset : Preset
新しい既存プリセット
Returns
-------
ret: int
更新されたプリセットのID
"""
"""指定されたプリセットを更新し、その ID を取得する。"""

# データベース更新の反映
self.load_presets()
self._refresh_cache()

# 対象プリセットの検索
prev_preset: tuple[int, Preset | None] = (-1, None)
Expand All @@ -139,20 +115,10 @@ def update_preset(self, preset: Preset) -> int:
return preset.id

def delete_preset(self, id: int) -> int:
"""
指定したIDのプリセットの削除
Parameters
----------
id: int
削除対象プリセットのID
Returns
-------
ret: int
削除されたプリセットのID
"""
"""ID で指定されたプリセットを削除し、その ID を取得する。"""

# データベース更新の反映
self.load_presets()
self._refresh_cache()

# 対象プリセットの検索
buf = None
Expand Down

0 comments on commit 8f90fa6

Please sign in to comment.