Skip to content

Commit

Permalink
FIX: プリセットマネージャーのエラーハンドリングを改善 (#1489)
Browse files Browse the repository at this point in the history
  • Loading branch information
sabonerune authored Nov 25, 2024
1 parent cf25ebf commit 54d4c9b
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 15 deletions.
6 changes: 3 additions & 3 deletions test/unit/preset/test_preset.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
27 changes: 15 additions & 12 deletions voicevox_engine/preset/preset_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand All @@ -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

Expand Down

0 comments on commit 54d4c9b

Please sign in to comment.