Mopidy: لا يتم تجاهل المسافات الزائدة في إعداد media_dirs لخلفية الملف

تم إنشاؤها على ١٣ يناير ٢٠٢١  ·  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: /// music / Network / flac٪ 20 ليس دليلاً.

C-bug good first issue A-file

التعليق الأكثر فائدة

@ djmattyg007 شكرًا جزيلاً على التوضيحات سأقوم بإنشاء مسودة للعلاقات العامة

ال 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://github.com/mopidy/mopidy/blob/develop/mopidy/file/library.py#L133

هل هذه القضية ما زالت مفتوحة؟ يمكنني العمل عليها إذا قدم لي أحدهم اتجاهًا. انا مساهم جديد

نعم فعلا. أعتقد أن المنشور الأصلي له الاتجاه ولكن يرجى السؤال عما إذا كان لديك سؤال محدد.

kingosticks ما رأيك في اقتراحي الأكبر قليلاً لجعل نظام تحليل التكوين أكثر قوة؟

عذرًا ، نعم ، نظرًا لأن الملف مرفق مع Mopidy ، فإن هذا الاتجاه جيد أيضًا. الأمر أكثر تعقيدًا في كل من الإصلاح والاختبار. إذا كنت سعيدًا بمساعدة / مراجعة ما يأتي به @ abid1998 ، فهذا يبدو جيدًا.

تضمين التغريدة
مما أفهمه ، يجب علي إجراء تغييرات في هذه الملفات؟
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

خاصة:

  • قم بتحديث النوعين String و List كما هو موثق في # 1966
  • قم بتنفيذ النوع Pair كما هو مذكور أعلاه

يجب عليك أيضًا إضافة اختبارات لهذه الوظيفة الجديدة هنا:

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

بمجرد الانتهاء من ذلك ، يمكنك تحديث امتداد الملف. يجب تحديث تعريف التكوين في __init__.py على غرار المثال أعلاه. يجب أن تكون قادرًا بعد ذلك على تبسيط كود تحليل دليل الوسائط بشكل كبير في library.py .

الرجاء إخبارنا إذا كنت بحاجة إلى مزيد من المساعدة أو المشورة ، أو إذا كان أي شيء كتبته لا معنى له.

@ djmattyg007 شكرًا جزيلاً على التوضيحات سأقوم بإنشاء مسودة للعلاقات العامة

@ abid1998 كيف تسير الأمور مع هذه التحديثات؟ هل تحتاج أي مساعدة؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

zopyx picture zopyx  ·  4تعليقات

ecoCuyo picture ecoCuyo  ·  3تعليقات

szuniverse picture szuniverse  ·  13تعليقات

ice-bear-forever picture ice-bear-forever  ·  6تعليقات

flyingrub picture flyingrub  ·  15تعليقات