Mopidy: ZusÀtzliche Leerzeichen in der media_dirs-Einstellung des Datei-Back-Ends werden nicht ignoriert

Erstellt am 13. Jan. 2021  Â·  12Kommentare  Â·  Quelle: mopidy/mopidy

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.

C-bug good first issue A-file

Hilfreichster Kommentar

@djmattyg007 Vielen Dank fĂŒr die Klarstellungen, ich werde einen PR-Entwurf erstellen und Sie dort markieren.

Alle 12 Kommentare

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:

  • Aktualisieren Sie die Typen String und List , wie in #1966 dokumentiert
  • Implementieren Sie den Typ Pair wie oben erwĂ€hnt

Sie 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?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

szuniverse picture szuniverse  Â·  13Kommentare

altano picture altano  Â·  6Kommentare

godzillamesel picture godzillamesel  Â·  6Kommentare

ice-bear-forever picture ice-bear-forever  Â·  6Kommentare

weilbith picture weilbith  Â·  7Kommentare