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

fix!: PythonのSynthesizer.metasUserDict.wordsを非ゲッターに #914

Merged
merged 2 commits into from
Jan 17, 2025

Conversation

qryxip
Copy link
Member

@qryxip qryxip commented Jan 1, 2025

内容

Python APIの以下のメソッドを@propertyではなくする。Java APIの形に寄せる形。

  • {blocking,asyncio}.Synthesizser.metas
  • {blocking,asyncio}.UserDict.words

以下のメソッドは注意書きを書いた上で@propertyのままにする。

  • {blocking,asyncio}.VoiceModelFile.metas

関連 Issue

その他

@qryxip qryxip requested a review from Hiroshiba January 1, 2025 13:24
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なんですが、ちょっと方針忘れてしまったので確認まで。。

これってそもそもなんでgetterじゃダメなんでしたっけ・・・。
全部.hogeを許す形にも倒せる気がするなぁと思い。
(もちろんCとかは関数じゃないといろいろしんどいとかありそうですが)

ちなみにpythonの@propertyは、特に明示的にsetterを定義しない限りsetはエラーになるはず。

@qryxip
Copy link
Member Author

qryxip commented Jan 17, 2025

setはできないと思うのですが、問題はdictlistが普通にミュータブルなことかなと。

# 正しい
uuid = userdict.add_word(word)
# まちがい(何も起きない)
userdict.words[uuid.uuid4()] = word

いっそのことUserDict自体に__setitem__とか__iter__を実装してdictっぽく振る舞わせるのがいいんじゃないかなーということを考えてます
(ちなみに幸いにしてそれは破壊的変更ではなさそうなので、後で考えればよいかなと思ってます)

@Hiroshiba
Copy link
Member

あ~なるほどです! 確かにappendしちゃう人とかいなくはないかも。
一応pydanticの力を借りればimmutableにすることもできそう?
https://docs.pydantic.dev/latest/api/config/#pydantic.config.ConfigDict.frozen

でも関数にしちゃうほうが手っ取り早そう!

dictの更新でユーザー辞書を変更可能にするのはアイデアとしては面白いかもですが、もし仮に将来asyncなバリデーションとか入ったときに詰むので反対寄りです!
あと単純に単語オブジェクトの中身を変えたときも更新してほしくなりそうで、この場合変更検知が難しそう。

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!!

@qryxip qryxip merged commit 8b18cec into VOICEVOX:main Jan 17, 2025
30 checks passed
@qryxip qryxip deleted the fix-make-some-py-methods-non-getter branch January 17, 2025 16:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants