UrsprĂŒnglich gemeldet unter https://discourse.mopidy.com/t/problems-accessing-files-via-nfs/4637/7
Die folgende Konfiguration fĂŒhrt zu der Warnung:
WARNUNG [MainThread] mopidy.file.library /music/Network/flac ist kein Verzeichnis.
[file]
media_dirs = /music/Network/flac | NAS
Dies geschieht, weil wir nicht jedes Element von Leerzeichen entfernen, sodass wir am Ende versuchen, den nicht vorhandenen Pfad "/music/Network/flac " zu verwenden. Dieses Problem ist aus der Warnmeldung nicht ersichtlich.
Wir sollten Leerzeichen entfernen und wahrscheinlich auch .as_uri()
wenn der Pfad angezeigt wird, dies hÀtte es deutlicher gemacht:
WARNUNG [MainThread] mopidy.file.library file:///music/Network/flac%20 ist kein Verzeichnis.
Ich denke nicht, dass wir irgendwelche Annahmen ĂŒber vom Benutzer angegebene Pfadnamen machen sollten. Wenn sie legitimerweise einen Pfad hĂ€tten, der mit einem Leerzeichen endete, könnten sie ihn nie vernĂŒnftig verwenden.
Eine bessere Darstellung des Pfades in Fehlermeldungen ist jedoch definitiv eine gute Idee.
Ich habe es nicht versucht, aber unser Konfigurationstyp Path
wird strip()
den Wert haben, also dachte ich, dass dies dasselbe tun sollte. Das wĂŒrde bedeuten, dass Sie derzeit wahrscheinlich keinen Pfad festlegen können, der mit einem Leerzeichen in einer Mopidy-Konfigurationsdatei endet. Ich bin mit Ihrem Punkt nicht einverstanden, aber ich kann mir vorstellen, dass versehentliches Leerzeichen am Ende von Zeilen in Konfigurationsdateien weitaus hĂ€ufiger vorkommt als Pfade, die mit Leerzeichen enden. Dies könnte also tatsĂ€chlich beabsichtigt und unsicher sein.
Das macht Sinn.
Als ich ĂŒber #1966 nachdachte, wurde mir klar, dass meine Idee zur Verbesserung der Konfigurationshandhabung auch in der Erweiterung File
könnte. Ausgehend von dem Beispiel, das ich zu diesem Thema bereitgestellt habe:
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),
)
Sie könnten dies dann fĂŒr die Erweiterung 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, "+")),
),
),
)
Dadurch entfÀllt die Notwendigkeit, dies im Actor-Code der File
Erweiterung zu handhaben, und stellt sicher, dass die Konfiguration vollstĂ€ndig validiert ist, bevor Mopidy ĂŒberhaupt startet.
Abgesehen davon ersetzt das obige Codebeispiel os.sep
bedingungslos durch "+"
. Dies unterscheidet sich von dem, was Mopidy derzeit tut - Pfadtrennzeichen werden nur durch +
wenn wir den echten Dateipfad als Pfadbezeichnung wiederverwenden. Ich konnte mir keinen Grund vorstellen, warum Pfadbezeichnungen keine SchrĂ€gstriche enthalten könnten, daher denke ich, dass es sinnvoll ist, die Ersetzung bedingungslos durchzufĂŒhren.
Referenz: https://github.com/mopidy/mopidy/blob/develop/mopidy/file/library.py#L133
Ist dieses Thema noch offen? Ich kann daran arbeiten, wenn mir jemand eine Anleitung gibt. Ich bin ein neuer Mitwirkender.
Jawohl. Ich denke, der ursprĂŒngliche Beitrag hat die Richtung, aber bitte fragen Sie, wenn Sie eine bestimmte Frage haben.
@kingosticks Was halten Sie von meinem etwas gröĂeren Vorschlag, das Konfigurations-Parsing-System leistungsfĂ€higer zu machen?
Entschuldigung, ja, da Datei mit Mopidy gebĂŒndelt ist, ist diese Richtung auch in Ordnung. Es ist nur im Fix und im Test komplizierter. Wenn Sie gerne helfen/ĂŒberprĂŒfen, was @abid1998 sich einfallen lĂ€sst , dann klingt das gut.
@kingosticks @djmattyg007
Soweit ich weiĂ, muss ich diese Dateien Ă€ndern?
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/__init__.py
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/library.py
Also sollte ich die Leerzeichen von der rechten Seite entfernen, bevor | Charakter? oder soll ich eine hilfreiche Fehlermeldung anzeigen, wenn ein Leerzeichen vorhanden ist?
@abid1998 Sie sollten zunĂ€chst Ănderungen an dieser Datei vornehmen:
https://github.com/mopidy/mopidy/blob/develop/mopidy/config/types.py
Speziell:
String
und List
, wie in #1966 dokumentiertPair
wie oben erwĂ€hntSie sollten auch hier Tests fĂŒr diese neue FunktionalitĂ€t hinzufĂŒgen:
https://github.com/mopidy/mopidy/blob/develop/tests/config/test_types.py
Sobald dies erledigt ist, können Sie die Dateierweiterung aktualisieren. Die Konfigurationsdefinition in __init__.py
sollte gemÀà meinem obigen Beispiel aktualisiert werden. Sie sollten dann in der Lage sein, den Parsing-Code des Medienverzeichnisses in library.py
drastisch zu vereinfachen.
Bitte lassen Sie es uns wissen, wenn Sie weitere Hilfe oder Beratung benötigen oder wenn etwas, was ich geschrieben habe, keinen Sinn ergibt.
@djmattyg007 Vielen Dank fĂŒr die Klarstellungen, ich werde einen PR-Entwurf erstellen und Sie dort markieren.
@abid1998 Wie geht es dir mit diesen Updates? Benötigen Sie Hilfe?
Hilfreichster Kommentar
@djmattyg007 Vielen Dank fĂŒr die Klarstellungen, ich werde einen PR-Entwurf erstellen und Sie dort markieren.