Mopidy: ファイルバックエンドのmedia_dirs設定の余分なスペースは無視されません

作成日 2021年01月13日  ·  12コメント  ·  ソース: mopidy/mopidy

当初はhttps://discourse.mopidy.com/t/problems-accessing-files-via-nfs/4637/7で報告されました

次の設定では、警告が表示されます。

警告[MainThread] mopidy.file.library / music / Network / flacはディレクトリではありません。

[file]
media_dirs = /music/Network/flac | NAS

これは、各アイテムから空白を削除しないため、存在しないパス「/ music / Network / flac」を使用しようとするために発生します。 この問題は、警告メッセージからは明らかではありません。

空白を削除し、パスを表示するときに.as_uri()も使用する必要があります。これにより、より明確になります。

警告[MainThread] mopidy.file.library file:/// music / Network / flac%20はディレクトリではありません。

C-bug good first issue A-file

最も参考になるコメント

@ djmattyg007説明をありがとうございました。ドラフトPRを作成し、そこでタグを付けます。

全てのコメント12件

ユーザーが指定したパス名については、何も想定すべきではないと思います。 彼らが合法的にスペース文字で終わるパスを持っていた場合、彼らはそれを賢明に使用することは決してできません。

ただし、エラーメッセージでパスをより適切に表すことは、間違いなく良い考えです。

私はそれを試しませんでしたが、 Pathタイプはstrip()の値になるので、これでも同じようになるはずだと思いました。 これは、Mopidy構成ファイルのスペースで終わるパスを現在設定できない可能性があることを意味します。 私はあなたの主張に同意しませんが、設定ファイルの行末の偶発的な空白は、スペースで終わるパスよりもはるかに一般的であると想像できます。 したがって、これは実際には意図的なものであるかどうかは不明です。

それは理にかなっている。

#1966について考える一環として、構成処理の改善のアイデアがFile拡張機能でも利用できることに気付きました。 その問題について私が提供した例から拡張します。

class Pair(ConfigValue):
    def __init__(self, optional=False, optional_pair=False, separator="|", subtypes=None):
        self._required = not optional
        self._optional_pair = optional_pair
        self._separator = separator
        if subtype:
            self._subtypes = subtype
        else:
            self._subtypes = (String(), String())

    def deserialize(self, value):
        raw_value = decode(value).strip()
        validators.validate_required(raw_value, self._required)

        if self._separator in raw_value:
            value = value.split(self._separator, 1)
        elif self._optional_pair:
            value = (raw_value, raw_value)
        else:
            raise ValueError("must have separator")

        return (self._subtypes[0].deserialize(value[0]), self._subtypes[1].deserialize(value[1]))

    def serialize(self, value, display=False):
        return "{0}{1}{2}".format(
            self._subtypes[0].serialize(value, display),
            self._separator,
            self._subtypes[1].serialize(value, display),
        )

次に、 File拡張子について、次のように構成できます。

from mopidy import config
import os

schema["media_dirs"] = config.List(
    optional=True,
    subtype=config.Pair(
        optional=False,
        optional_pair=True,
        subtypes=(
            config.Path(),
            config.String(transformer=lambda x: x.replace(os.sep, "+")),
        ),
    ),
)

これにより、 File拡張機能のアクターコード内でこれを処理する必要がなくなり、Mopidyが起動する前に構成が完全に検証されるようになります。

余談ですが、上記のコードサンプルは、 os.sep"+"無条件に置き換えます。 これは、Mopidyが現在行っていることとは異なります。パスのラベルとして実際のファイルパスを再利用する場合、パス区切り文字は+のみ置き換えられます。 パスラベルにスラッシュを入れられない理由が思いつかなかったので、無条件に置換するのが理にかなっていると思います。

参照: https

この問題はまだ開いていますか? 誰かが私に指示を与えてくれれば、私はそれに取り組むことができます。 私は新しい寄稿者です。

はい。 元の投稿に方向性があると思いますが、具体的な質問があればお問い合わせください。

@kingosticks構成解析システムをより強力にするという私の少し大きな提案についてどう思いますか?

申し訳ありませんが、はい、FileはMopidyにバンドルされているので、その方向も問題ありません。 修正とテストの両方で、より複雑になります。 @ abid1998が思いついたものを手伝って/レビューして喜んでいるなら、それはいいですね。

@kingosticks @ djmattyg007
私が理解していることから、これらのファイルに変更を加える必要がありますか?
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/__init__.py
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/library.py
だから私は前に右側からスペースを取り除く必要があります| キャラクター ? または、スペースがある場合に役立つエラーメッセージを表示する必要がありますか?

@ abid1998このファイルに変更を加えることから始めたいと思うでしょう:

https://github.com/mopidy/mopidy/blob/develop/mopidy/config/types.py

具体的には:

  • #1966に記載されているように、 StringおよびListタイプを更新します
  • 上記のようにPairタイプを実装します

この新機能のテストもここに追加する必要があります。

https://github.com/mopidy/mopidy/blob/develop/tests/config/test_types.py

それが完了したら、ファイル拡張子を更新できます。 __init__.py定義は、上記の例に沿って更新する必要があります。 これで、 library.pyのメディアディレクトリ解析コードを大幅に簡素化できるはずです。

さらにヘルプやアドバイスが必要な場合、または私が書いたものが意味をなさない場合は、お知らせください。

@ djmattyg007説明をありがとうございました。ドラフトPRを作成し、そこでタグを付けます。

@ abid1998これらのアップデートはどうですか? 何か助けが必要ですか?

このページは役に立ちましたか?
0 / 5 - 0 評価