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

プリセットファイルの位置をユーザーディレクトリに変更 #1493

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

takana-v
Copy link
Member

内容

プリセットファイル(presets.yaml)の位置を、エンジン直下からユーザーディレクトリに変更します。
これにより、全ユーザー向けにインストールした時など、エンジン直下へのファイル書き込み権限が無い時にエラーが発生することを防ぎます。

関連 Issue

close #1479

ref #1491
ref #1478
ref #1323 (comment)

スクリーンショット・動画など

その他

ユーザーが古いバージョンのVOICEVOXをアンインストールする時にpresets.yamlが削除される気がしたので、マイグレーション処理は入れていません。
必要であれば追加したいと思います。

@takana-v takana-v requested a review from a team as a code owner November 28, 2024 12:48
@takana-v takana-v requested review from Hiroshiba and Copilot and removed request for a team November 28, 2024 12:48

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot reviewed 5 out of 5 changed files in this pull request and generated no suggestions.

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ほぼLGTMです!!!

presets.yamlの場所が変わるという破壊的変更になりますが、 @takana-v さんのおっしゃる通り再インストール時に消える場合が多そうな気がしています。
・・・・・・・が、例えばサードパーティソフトウェアが利用していて、アップデートの際に気をつけている場合などは問題になる気がしますね。。。。

ちょっともしよかったらなのですが、Pythonでマイグレーションがどれぐらい心地よく書けるかのチェックも兼ねて、マイグレーションするのはどうでしょうか。
後でマイグレーションが必要になった時に自信を持ってできそうだなーと。
あまり興味なければこちらで書こうと思います!

多分やり方は簡単で、PresetManager内の処理をちょっと書き足せば終わり?
ユーザーディレクトリのプリセットがなく、エンジンディレクトリのプリセットファイルがあればデータをコピーすればよさそう。
エンジンディレクトリのプリセットファイルは消して良さそうだけど、これもエラーになっちゃいそうなので放置しても良さそう。
まあでも悪さしそうだし、tryで囲みつつrmしてみるのもよさそう。

プルリクいただいててお願いしちゃって申し訳ないです 🙇
微妙だったら結構遠慮なくおっしゃっていただければ・・・!!!

README.md Outdated Show resolved Hide resolved

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot reviewed 6 out of 6 changed files in this pull request and generated no suggestions.

Comments skipped due to low confidence (2)

voicevox_engine/preset/preset_manager.py:47

  • The error message 'Failed to migrate preset file.' is unclear. Consider providing more context, such as 'Failed to migrate preset file from engine directory to user directory.'
warnings.warn("Failed to migrate preset file.", stacklevel=1)

voicevox_engine/preset/preset_manager.py:41

  • The new migration logic for moving 'presets.yaml' from the engine directory to the user directory is not covered by tests. Ensure there is a test case that verifies this behavior.
if not self.preset_path.exists():
Copy link
Member Author

@takana-v takana-v left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ユーザーディレクトリにファイルが無く、エンジン直下にファイルがある時に、ファイルをmoveする処理を追加しました。

@@ -350,3 +351,19 @@ def test_delete_preset_write_failure(tmp_path: Path) -> None:
preset_manager.delete_preset(1)
assert len(preset_manager.presets) == 2
remove(preset_path)


def test_migrate_preset(tmp_path: Path) -> None:
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

テストのために(一時的ですが)エンジン直下にファイルを作るのが少し気になります。

Copy link
Member

@Hiroshiba Hiroshiba Nov 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

たしかに!!

CI環境でのみ実行でもいいかもですね!
確かActionsはenv.CIがtrueになってるはず。
条件によって実行するかどうか制御できる機構がきっとあるので、そこに渡す感じで実装できるかもです!

old_preset_path = engine_root() / "presets.yaml"
if old_preset_path.exists():
try:
shutil.move(old_preset_path, self.preset_path)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shutil.moveについて以前に言及があったので、リンクを貼っておきます。
#630 (comment)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot reviewed 6 out of 7 changed files in this pull request and generated no suggestions.

Files not reviewed (1)
  • README.md: Evaluated as low risk
@@ -350,3 +351,19 @@ def test_delete_preset_write_failure(tmp_path: Path) -> None:
preset_manager.delete_preset(1)
assert len(preset_manager.presets) == 2
remove(preset_path)


def test_migrate_preset(tmp_path: Path) -> None:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他にもマイグレーションが発生するかもなので、何をテストしたいかの意図をちょっとだけ含めるとさらに良いかも。
こんな感じでしょうか。

Suggested change
def test_migrate_preset(tmp_path: Path) -> None:
def test_migrate_default_preset_path(tmp_path: Path) -> None:

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ほぼ lgtm です!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants