Mopidy: Espaços extras na configuração media_dirs do backend do arquivo não são ignorados

Criado em 13 jan. 2021  ·  12Comentários  ·  Fonte: mopidy/mopidy

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

A configuração a seguir resulta no aviso:

AVISO [MainThread] mopidy.file.library / music / Network / flac não é um diretório.

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

Isso acontece porque não retiramos os espaços em branco de cada item, então acabamos tentando usar o caminho inexistente "/ music / Network / flac". Este problema não é óbvio na mensagem de aviso.

Devemos remover os espaços em branco e provavelmente também usar .as_uri() ao exibir o caminho, isso o teria tornado mais óbvio:

AVISO [MainThread] mopidy.file.library file: /// music / Network / flac% 20 não é um diretório.

C-bug good first issue A-file

Comentários muito úteis

@ djmattyg007 Muito obrigado pelos esclarecimentos. Vou criar um rascunho de relações públicas e marcá-lo lá.

Todos 12 comentários

Não acho que devemos fazer suposições sobre os nomes de caminho especificados pelo usuário. Se eles tivessem legitimamente um caminho que terminasse em um personagem espacial, eles nunca seriam capazes de usá-lo de maneira sensata.

No entanto, representar melhor o caminho em mensagens de erro é definitivamente uma boa ideia.

Eu não tentei, mas nosso tipo de configuração Path terá strip() o valor, então achei que isso deveria fazer o mesmo. O que significaria que você provavelmente não pode definir um caminho que termine em um espaço em um arquivo de configuração do Mopidy. Não discordo do seu ponto, mas posso imaginar que espaços em branco acidentais no final das linhas em arquivos de configuração sejam muito mais comuns do que caminhos que terminam com espaços. Portanto, isso pode ser realmente intencional, incerto.

Isso faz sentido.

Como parte da reflexão sobre o # 1966, percebi que minha ideia de melhorias no manuseio da configuração também poderia ser utilizada na extensão File . Estendendo-se do exemplo que forneci sobre esse problema:

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

Você poderia então compor assim para a extensão 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, "+")),
        ),
    ),
)

Isso elimina a necessidade de lidar com qualquer um desses itens dentro do código de ator da extensão File e garante que a configuração seja totalmente validada antes mesmo de iniciar o Mopidy.

À parte, o exemplo de código acima substitui incondicionalmente os.sep por "+" . Isso difere do que o Mopidy faz atualmente - os separadores de caminho são substituídos apenas por + se estivermos reutilizando o caminho do arquivo real como o rótulo do caminho. Não consegui pensar em um motivo pelo qual os rótulos de caminho não poderiam conter barras, então acho que faz sentido realizar a substituição incondicionalmente.

Referência: https://github.com/mopidy/mopidy/blob/develop/mopidy/file/library.py#L133

Este problema ainda está aberto? Posso trabalhar nisso se alguém me fornecer uma orientação. Eu sou um novo contribuidor.

sim. Acho que o post original tem a direção, mas pergunte se você tem uma pergunta específica.

@kingosticks O que você acha da minha proposta um pouco maior de tornar o sistema de análise de configuração mais poderoso?

Desculpe, sim, uma vez que o File está incluído no Mopidy, essa direção também é adequada. É apenas mais complicado tanto na correção quanto no teste. Se você está feliz em ajudar / revisar o que @ abid1998 apresenta, então isso soa bem.

@kingosticks @ djmattyg007
Pelo que entendi, tenho que fazer alterações nesses arquivos?
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/__init__.py
https://github.com/mopidy/mopidy/blob/HEAD/mopidy/file/library.py
Portanto, devo remover os espaços do lado direito antes de | personagem ? ou devo exibir uma mensagem de erro útil se houver um espaço?

@ abid1998 Você vai querer começar fazendo alterações neste arquivo:

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

Especificamente:

  • Atualize os tipos String e List , conforme documentado em # 1966
  • Implemente o tipo Pair conforme mencionado acima

Você também deve adicionar testes para esta nova funcionalidade aqui:

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

Feito isso, você pode atualizar a extensão do arquivo. A definição de configuração em __init__.py deve ser atualizada ao longo das linhas do meu exemplo acima. Você poderá então simplificar drasticamente o código de análise do diretório de mídia em library.py .

Informe-nos se precisar de mais ajuda ou conselho, ou se algo que escrevi não fizer sentido.

@ djmattyg007 Muito obrigado pelos esclarecimentos. Vou criar um rascunho de relações públicas e marcá-lo lá.

@ abid1998 Como você está indo com essas atualizações? Você precisa de alguma ajuda?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ecoCuyo picture ecoCuyo  ·  3Comentários

ice-bear-forever picture ice-bear-forever  ·  6Comentários

altano picture altano  ·  6Comentários

flyingrub picture flyingrub  ·  15Comentários

godzillamesel picture godzillamesel  ·  6Comentários