Mopidy: Spasi ekstra dalam pengaturan media_dirs backend File tidak diabaikan

Dibuat pada 13 Jan 2021  ·  12Komentar  ·  Sumber: mopidy/mopidy

Awalnya dilaporkan di https://discourse.mopidy.com/t/problems-accessing-files-via-nfs/4637/7

Konfigurasi berikut menghasilkan peringatan:

PERINGATAN [MainThread] mopidy.file.library /music/Network/flac bukan direktori.

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

Ini terjadi karena kami tidak menghapus spasi putih dari setiap item sehingga kami akhirnya mencoba menggunakan jalur "/music/Network/flac" yang tidak ada. Masalah ini tidak terlihat dari pesan peringatan.

Kita harus menghapus spasi dan kita mungkin juga harus menggunakan .as_uri() saat menampilkan path, ini akan membuatnya lebih jelas:

PERINGATAN [MainThread] mopidy.file.library file:///music/Network/flac%20 bukan direktori.

C-bug good first issue A-file

Komentar yang paling membantu

@djmattyg007 Terima kasih banyak atas klarifikasinya. Saya akan membuat draft PR dan menandai Anda di sana.

Semua 12 komentar

Saya tidak berpikir kita harus membuat asumsi tentang nama path yang ditentukan oleh pengguna. Jika mereka secara sah memiliki jalan yang berakhir dengan karakter luar angkasa, mereka tidak akan pernah bisa menggunakannya dengan bijaksana.

Mewakili jalur dengan lebih baik dalam pesan kesalahan jelas merupakan ide yang bagus.

Saya tidak mencobanya tetapi tipe konfigurasi Path akan strip() nilainya jadi saya pikir ini harus melakukan hal yang sama. Yang berarti Anda mungkin saat ini tidak dapat menetapkan jalur yang diakhiri dengan spasi dalam file konfigurasi Mopidy. Saya tidak setuju dengan maksud Anda, tetapi saya dapat membayangkan spasi putih yang tidak disengaja di akhir baris dalam file konfigurasi jauh lebih umum daripada jalur yang diakhiri dengan spasi. Jadi ini mungkin sebenarnya disengaja, tidak pasti.

Itu masuk akal.

Sebagai bagian dari pemikiran tentang #1966, saya menyadari bahwa ide peningkatan penanganan konfigurasi saya dapat digunakan dalam ekstensi File juga. Memperluas dari contoh yang saya berikan tentang masalah itu:

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),
        )

Anda kemudian dapat menulis seperti ini untuk ekstensi 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, "+")),
        ),
    ),
)

Ini menghilangkan kebutuhan untuk menangani semua ini di dalam kode aktor ekstensi File , dan memastikan konfigurasi sepenuhnya divalidasi bahkan sebelum Mopidy dimulai.

Sebagai tambahan, contoh kode di atas tanpa syarat menggantikan os.sep dengan "+" . Ini berbeda dari apa yang dilakukan Mopidy saat ini - pemisah jalur hanya diganti dengan + jika kita menggunakan kembali jalur file asli sebagai label jalur. Saya tidak dapat memikirkan alasan mengapa label jalur tidak boleh memiliki garis miring, jadi saya pikir masuk akal untuk melakukan substitusi tanpa syarat.

Referensi: https://github.com/mopidy/mopidy/blob/develop/mopidy/file/library.py#L133

Apakah masalah ini masih terbuka? Saya dapat mengerjakannya jika seseorang memberi saya arahan. Saya kontributor baru.

Ya. Saya pikir posting asli memiliki arah tetapi tolong tanyakan jika Anda memiliki pertanyaan spesifik.

@kingosticks Apa pendapat Anda tentang proposal saya yang sedikit lebih besar untuk membuat sistem penguraian konfigurasi lebih kuat?

Maaf, ya, karena File dibundel dengan Mopidy, arah itu juga baik-baik saja. Hanya saja lebih rumit dalam perbaikan dan pengujian. Jika Anda dengan senang hati membantu/meninjau apa yang dihasilkan oleh @abid1998 maka itu terdengar bagus.

@kingosticks @djmattyg007
Dari apa yang saya pahami, saya harus membuat perubahan pada file-file ini?
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/__init__.py
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/library.py
Jadi haruskah saya menghapus spasi dari sisi kanan sebelum | karakter? atau haruskah saya menampilkan pesan kesalahan yang bermanfaat jika ada spasi?

@abid1998 Anda akan ingin memulai dengan membuat perubahan pada file ini:

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

Secara khusus:

  • Perbarui tipe String dan List , seperti yang didokumentasikan di #1966
  • Terapkan tipe Pair seperti yang disebutkan di atas

Anda juga harus menambahkan tes untuk fungsi baru ini di sini:

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

Setelah selesai, Anda dapat memperbarui ekstensi File. Definisi konfigurasi di __init__.py harus diperbarui sesuai dengan contoh saya di atas. Anda kemudian dapat secara drastis menyederhanakan kode penguraian direktori media di library.py .

Beri tahu kami jika Anda memerlukan bantuan atau saran lebih lanjut, atau jika ada yang saya tulis tidak masuk akal.

@djmattyg007 Terima kasih banyak atas klarifikasinya. Saya akan membuat draft PR dan menandai Anda di sana.

@abid1998 Bagaimana kabar Anda dengan pembaruan ini? Apakah Anda memerlukan bantuan?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mczerski picture mczerski  ·  9Komentar

artjeck picture artjeck  ·  11Komentar

Mestelan picture Mestelan  ·  6Komentar

zopyx picture zopyx  ·  4Komentar

pnijhara picture pnijhara  ·  5Komentar