تم الإبلاغ عنها في الأصل على 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 ليس دليلاً.
لا أعتقد أنه يجب علينا وضع أي افتراضات حول أسماء المسار المحددة من قبل المستخدم. إذا كان لديهم مسارًا انتهى بشكل شرعي بطابع فضائي ، فلن يكونوا قادرين على استخدامه بشكل منطقي.
ومع ذلك ، فإن تمثيل المسار بشكل أفضل في رسائل الخطأ يعد بالتأكيد فكرة جيدة.
لم أحاول ذلك ولكن نوع التكوين الخاص بنا 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
كما هو موثق في # 1966Pair
كما هو مذكور أعلاهيجب عليك أيضًا إضافة اختبارات لهذه الوظيفة الجديدة هنا:
https://github.com/mopidy/mopidy/blob/develop/tests/config/test_types.py
بمجرد الانتهاء من ذلك ، يمكنك تحديث امتداد الملف. يجب تحديث تعريف التكوين في __init__.py
على غرار المثال أعلاه. يجب أن تكون قادرًا بعد ذلك على تبسيط كود تحليل دليل الوسائط بشكل كبير في library.py
.
الرجاء إخبارنا إذا كنت بحاجة إلى مزيد من المساعدة أو المشورة ، أو إذا كان أي شيء كتبته لا معنى له.
@ djmattyg007 شكرًا جزيلاً على التوضيحات سأقوم بإنشاء مسودة للعلاقات العامة
@ abid1998 كيف تسير الأمور مع هذه التحديثات؟ هل تحتاج أي مساعدة؟
التعليق الأكثر فائدة
@ djmattyg007 شكرًا جزيلاً على التوضيحات سأقوم بإنشاء مسودة للعلاقات العامة