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

Python APIとJava APIのエラーを詳細にする #640

Merged

Conversation

qryxip
Copy link
Member

@qryxip qryxip commented Oct 12, 2023

内容

Python APIとJava APIの例外に、次の変更を加えます。

  1. VoicevoxError/VoicevoxExceptionを解体し、細分化

    以下の例外クラスを継承するようにする。

    Python Java
    NotLoadedOpenjtalkDict Exception IllegalStateException
    GpuSupport Exception RuntimeException
    OpenZipFile Exception IOException
    ReadZipEntry Exception IOException
    ModelAlreadyLoaded Exception IllegalStateException
    StyleAlreadyLoaded Exception IllegalStateException
    InvalidModelData Exception IOException
    GetSupportedDevices Exception IOException
    StyleNotFound KeyError IndexOutOfBoundsException
    ModelNotFound KeyError IndexOutOfBoundsException
    InferenceFailed Exception IOException
    ExtractFullContextLabel Exception IllegalArgumentException
    ParseKana ValueError IllegalArgumentException
    LoadUserDict Exception IOException
    SaveUserDict Exception IOException
    WordNotFound KeyError IndexOutOfBoundsException
    UseUserDict Exception RuntimeException
    InvalidWord ValueError IllegalArgumentException
    その他 ValueErrorとか IllegalArgumentExceptionとか
  2. Rustの"source"を"cause"に反映

    Exception: なんかのエラー (1)
    
    The above exception was the direct cause of the following exception:
    
    Exception: なんかのエラー (2)
    
    The above exception was the direct cause of the following exception:
    
    Exception: unable to locate the end of central directory record
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "./run.py", line 104, in <module>
        asyncio.run(main())
      File "/home/ryo/.pyenv/versions/3.8.15/lib/python3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
      File "/home/ryo/.pyenv/versions/3.8.15/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
        return future.result()
      File "./run.py", line 46, in main
        model = await VoiceModel.from_path(vvm_path)
    voicevox_core.OpenZipFileError: `/dev/null`の読み込みに失敗しました: ZIPファイルとして開くことができませんでした
  • Python API
  • Java API

関連 Issue

#580, #589, #600, #622, #623, #624 の続きです。

ref #545

その他

#580 で言ったこれに対応します。

  • Python APIとJava APIでsourceの内容を表現

@qryxip qryxip marked this pull request as ready for review October 19, 2023 17:46
@qryxip
Copy link
Member Author

qryxip commented Oct 19, 2023

コードが整っているとは言えない状態ですが、とりあえず実装は完了。

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

ぶっちゃけ正直精査してないです!なんか良さそう!
前も同じようなこと言った気かもしれないんですが、自動生成できるコードもどんどん用意していけると自重で動けなくなるのを先延ばしにできる気がしました!
(いわゆる自動化)

@sevenc-nanashi さんもよかったら見ていただけると!!!

@qryxip
Copy link
Member Author

qryxip commented Oct 19, 2023

今気付いたのですがJava APIの方、IOException相当のものをthrowするならthrowsにしないと駄目ですね。多分。

Comment on lines +429 to +515
class NotLoadedOpenjtalkDictError(Exception):
"""open_jtalk辞書ファイルが読み込まれていない。"""

...

class GpuSupportError(Exception):
"""GPUモードがサポートされていない。"""

...

class OpenZipFileError(Exception):
"""ZIPファイルを開くことに失敗した。"""

...

class ReadZipEntryError(Exception):
"""ZIP内のファイルが読めなかった。"""

...

class ModelAlreadyLoadedError(Exception):
"""すでに読み込まれている音声モデルを読み込もうとした。"""

...

class StyleAlreadyLoadedError(Exception):
"""すでに読み込まれているスタイルを読み込もうとした。"""

...

class InvalidModelDataError(Exception):
"""無効なモデルデータ。"""

...

class GetSupportedDevicesError(Exception):
"""サポートされているデバイス情報取得に失敗した。"""

...

class StyleNotFoundError(KeyError):
"""スタイルIDに対するスタイルが見つからなかった。"""

...

class ModelNotFoundError(KeyError):
"""音声モデルIDに対する音声モデルが見つからなかった。"""

...

class InferenceFailedError(Exception):
"""推論に失敗した。"""

...

class ExtractFullContextLabelError(Exception):
"""コンテキストラベル出力に失敗した。"""

...

class ParseKanaError(ValueError):
"""AquesTalk風記法のテキストの解析に失敗した。"""

...

class LoadUserDictError(Exception):
"""ユーザー辞書を読み込めなかった。"""

...

class SaveUserDictError(Exception):
"""ユーザー辞書を書き込めなかった。"""

...

class WordNotFoundError(KeyError):
"""ユーザー辞書に単語が見つからなかった。"""

...

class UseUserDictError(Exception):
"""OpenJTalkのユーザー辞書の設定に失敗した。"""

...

class InvalidWordError(ValueError):
"""ユーザー辞書の単語のバリデーションに失敗した。"""
Copy link
Member Author

Choose a reason for hiding this comment

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

.pyiじゃなくてPythonの方に移してもいいかも。

Copy link
Member Author

Choose a reason for hiding this comment

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

これは別PRでやろうと思います。

@qryxip
Copy link
Member Author

qryxip commented Oct 22, 2023

今気付いたのですがJava APIの方、IOException相当のものをthrowするならthrowsにしないと駄目ですね。多分。

これを今やりました。
9e87842 (#640)

@sevenc-nanashi すみません。お手数ですがこちらも確認して頂いてもよいでしょうか。OKならそのままマージして頂けると。

@sevenc-nanashi
Copy link
Member

sevenc-nanashi commented Oct 22, 2023

CI通ったらマージします。

@sevenc-nanashi sevenc-nanashi merged commit 70acaf8 into VOICEVOX:main Oct 22, 2023
46 checks passed
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.

3 participants