Mopidy: Los espacios adicionales en la configuración de media_dirs de File backend no se ignoran

Creado en 13 ene. 2021  ·  12Comentarios  ·  Fuente: mopidy/mopidy

Informado originalmente en https://discourse.mopidy.com/t/problems-accessing-files-via-nfs/4637/7

La siguiente configuración da como resultado la advertencia:

ADVERTENCIA [MainThread] mopidy.file.library / music / Network / flac no es un directorio.

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

Esto sucede porque no eliminamos los espacios en blanco de cada elemento, por lo que terminamos intentando usar la ruta inexistente "/ music / Network / flac". Este problema no es obvio en el mensaje de advertencia.

Deberíamos eliminar los espacios en blanco y probablemente también deberíamos usar .as_uri() al mostrar la ruta, esto lo habría hecho más obvio:

ADVERTENCIA [MainThread] mopidy.file.library file: /// music / Network / flac% 20 no es un directorio.

C-bug good first issue A-file

Comentario más útil

@ djmattyg007 Muchas gracias por las aclaraciones.

Todos 12 comentarios

No creo que debamos hacer suposiciones sobre los nombres de ruta especificados por el usuario. Si tuvieran legítimamente un camino que terminara en un personaje espacial, nunca podrían usarlo con sensatez.

Sin embargo, representar mejor la ruta en los mensajes de error es definitivamente una buena idea.

No lo intenté, pero nuestro tipo de configuración Path será strip() el valor, así que pensé que esto debería hacer lo mismo. Lo que significaría que probablemente no pueda establecer actualmente una ruta que termine en un espacio en un archivo de configuración de Mopidy. No estoy en desacuerdo con su punto, pero puedo imaginar que los espacios en blanco accidentales al final de las líneas en los archivos de configuración son mucho más comunes que las rutas que terminan con espacios. Entonces, esto podría ser intencional, inseguro.

Eso tiene sentido.

Como parte de pensar en # 1966, me di cuenta de que mi idea de mejoras en el manejo de la configuración también podría utilizarse en la extensión File . Ampliando el ejemplo que proporcioné sobre ese tema:

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

A continuación, podría componer esto así para la extensión 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, "+")),
        ),
    ),
)

Esto elimina la necesidad de manejar todo esto dentro del código de actor de la extensión File y asegura que la configuración esté completamente validada antes de que Mopidy comience.

Aparte, el ejemplo de código anterior reemplaza incondicionalmente os.sep con "+" . Esto difiere de lo que hace actualmente Mopidy: los separadores de ruta solo se sustituyen por + si estamos reutilizando la ruta del archivo real como etiqueta de la ruta. No pude pensar en una razón por la que las etiquetas de ruta no pudieran tener barras, así que creo que tiene sentido realizar la sustitución incondicionalmente.

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

¿Sigue abierto este problema? Puedo trabajar en ello si alguien me da una dirección. Soy un colaborador nuevo.

Si. Creo que la publicación original tiene la dirección, pero pregunte si tiene una pregunta específica.

@kingosticks ¿Qué opinas de mi propuesta un poco más amplia de hacer que el sistema de análisis de la configuración sea más potente?

Lo siento, sí, dado que File está incluido con Mopidy, esa dirección también está bien. Es más complicado tanto en la solución como en la prueba. Si está feliz de ayudar / revisar lo que se le ocurre a @ abid1998 , entonces eso suena bien.

@kingosticks @ djmattyg007
¿Por lo que tengo entendido, tengo que hacer cambios en estos archivos?
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/__init__.py
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/library.py
Entonces, ¿debo quitar los espacios del lado derecho antes de | personaje ? ¿O debería mostrar un mensaje de error útil si hay un espacio?

@ abid1998 Querrá comenzar haciendo cambios en este archivo:

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

Específicamente:

  • Actualice los tipos String y List , como se documenta en # 1966
  • Implemente el tipo Pair como se mencionó anteriormente

También debe agregar pruebas para esta nueva funcionalidad aquí:

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

Una vez hecho esto, puede actualizar la extensión del archivo. La definición de configuración en __init__.py debería actualizarse siguiendo las líneas de mi ejemplo anterior. Entonces debería poder simplificar drásticamente el código de análisis del directorio de medios en library.py .

Háganos saber si necesita más ayuda o consejo, o si algo que he escrito no tiene sentido.

@ djmattyg007 Muchas gracias por las aclaraciones.

@ abid1998 ¿Cómo te va con estas actualizaciones? ¿Necesitas ayuda?

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

altano picture altano  ·  6Comentarios

artjeck picture artjeck  ·  11Comentarios

pnijhara picture pnijhara  ·  5Comentarios

flyingrub picture flyingrub  ·  15Comentarios

jodal picture jodal  ·  13Comentarios