diff --git a/test/unit/preset/test_preset.py b/test/unit/preset/test_preset.py index 0efbfcfff..995f81d29 100644 --- a/test/unit/preset/test_preset.py +++ b/test/unit/preset/test_preset.py @@ -192,7 +192,7 @@ def test_add_preset_write_failure(tmp_path: Path) -> None: preset_manager.load_presets() preset_manager._refresh_cache = lambda: None # type:ignore[method-assign] preset_manager.preset_path = "" # type: ignore[assignment] - true_msg = "プリセットの設定ファイルが見つかりません" + true_msg = "プリセットの書き込みに失敗しました" with pytest.raises(PresetInternalError, match=true_msg): preset_manager.add_preset(preset) assert len(preset_manager.presets) == 2 @@ -302,7 +302,7 @@ def test_update_preset_write_failure(tmp_path: Path) -> None: preset_manager.load_presets() preset_manager._refresh_cache = lambda: None # type:ignore[method-assign] preset_manager.preset_path = "" # type: ignore[assignment] - true_msg = "プリセットの設定ファイルが見つかりません" + true_msg = "プリセットの書き込みに失敗しました" with pytest.raises(PresetInternalError, match=true_msg): preset_manager.update_preset(preset) assert len(preset_manager.presets) == 2 @@ -345,7 +345,7 @@ def test_delete_preset_write_failure(tmp_path: Path) -> None: preset_manager.load_presets() preset_manager._refresh_cache = lambda: None # type:ignore[method-assign] preset_manager.preset_path = "" # type: ignore[assignment] - true_msg = "プリセットの設定ファイルが見つかりません" + true_msg = "プリセットの書き込みに失敗しました" with pytest.raises(PresetInternalError, match=true_msg): preset_manager.delete_preset(1) assert len(preset_manager.presets) == 2 diff --git a/voicevox_engine/preset/preset_manager.py b/voicevox_engine/preset/preset_manager.py index 7029db043..eac2f2583 100644 --- a/voicevox_engine/preset/preset_manager.py +++ b/voicevox_engine/preset/preset_manager.py @@ -46,14 +46,17 @@ def _refresh_cache(self) -> None: if _last_modified_time == self.last_modified_time: # 更新無し return + + # データベースの読み込み + with open(self.preset_path, mode="r", encoding="utf-8") as f: + obj = yaml.safe_load(f) except OSError: - raise PresetInternalError("プリセットの設定ファイルが見つかりません") + raise PresetInternalError("プリセットの読み込みに失敗しました") + except yaml.YAMLError: + raise PresetInternalError("プリセットのパースに失敗しました") + if obj is None: + raise PresetInternalError("プリセットの設定ファイルが空の内容です") - # データベースの読み込み - with open(self.preset_path, mode="r", encoding="utf-8") as f: - obj = yaml.safe_load(f) - if obj is None: - raise PresetInternalError("プリセットの設定ファイルが空の内容です") try: preset_list_adapter = TypeAdapter(list[Preset]) _presets = preset_list_adapter.validate_python(obj) @@ -87,8 +90,8 @@ def add_preset(self, preset: Preset) -> int: self._write_on_file() except Exception as err: self.presets.pop() - if isinstance(err, FileNotFoundError): - raise PresetInternalError("プリセットの設定ファイルが見つかりません") + if isinstance(err, OSError): + raise PresetInternalError("プリセットの書き込みに失敗しました") else: raise err @@ -123,8 +126,8 @@ def update_preset(self, preset: Preset) -> int: self._write_on_file() except Exception as err: self.presets[prev_preset[0]] = prev_preset[1] - if isinstance(err, FileNotFoundError): - raise PresetInternalError("プリセットの設定ファイルが見つかりません") + if isinstance(err, OSError): + raise PresetInternalError("プリセットの書き込みに失敗しました") else: raise err @@ -150,9 +153,9 @@ def delete_preset(self, id: int) -> int: # 変更の反映。失敗時はリバート。 try: self._write_on_file() - except FileNotFoundError: + except OSError: self.presets.insert(buf_index, buf) - raise PresetInternalError("プリセットの設定ファイルが見つかりません") + raise PresetInternalError("プリセットの書き込みに失敗しました") return id