Mopidy: ํŒŒ์ผ ๋ฐฑ์—”๋“œ์˜ media_dirs ์„ค์ •์— ์žˆ๋Š” ์ถ”๊ฐ€ ๊ณต๋ฐฑ์€ ๋ฌด์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2021๋…„ 01์›” 13์ผ  ยท  12์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mopidy/mopidy

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 file:///music/Network/flac%20์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

C-bug good first issue A-file

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@djmattyg007 ์„ค๋ช…

๋ชจ๋“  12 ๋Œ“๊ธ€

์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๊ฒฝ๋กœ ์ด๋ฆ„์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ๊ฐ€์ •๋„ ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ํ•ฉ๋ฒ•์ ์œผ๋กœ ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ ๋๋‚˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์—์„œ ๊ฒฝ๋กœ๋ฅผ ๋” ์ž˜ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์šฐ๋ฆฌ์˜ 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 ๊ตฌ์„ฑ ๊ตฌ๋ฌธ ๋ถ„์„ ์‹œ์Šคํ…œ์„ ๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์•ฝ๊ฐ„ ๋” ํฐ ์ œ์•ˆ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, File์€ Mopidy์™€ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋ฏ€๋กœ ๋ฐฉํ–ฅ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ •๊ณผ ํ…Œ์ŠคํŠธ ๋ชจ๋‘์—์„œ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. @abid1998 ์ด ๋œ๋‹ค๋ฉด ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@kingosticks @ djmattyg007
๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ์ด ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
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

๊ตฌ์ฒด์ ์œผ๋กœ ํŠน๋ณ„ํžˆ:

  • #1966์— ์„ค๋ช…๋œ ๋Œ€๋กœ String ๋ฐ List ์œ ํ˜•์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ Pair ์œ ํ˜•์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์—ฌ๊ธฐ์— ์ด โ€‹โ€‹์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์™„๋ฃŒ๋˜๋ฉด ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. __init__.py ์˜ ๊ตฌ์„ฑ ์ •์˜๋Š” ์œ„์˜ ์˜ˆ์™€ ๊ฐ™์ด ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด library.py ์˜ ๋ฏธ๋””์–ด ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ๋ฌธ ๋ถ„์„ ์ฝ”๋“œ๋ฅผ ๋Œ€ํญ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ๋งŽ์€ ๋„์›€์ด๋‚˜ ์กฐ์–ธ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฐ€ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

@djmattyg007 ์„ค๋ช…

@abid1998 ์ด๋ฒˆ ์—…๋ฐ์ดํŠธ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”? ๋„์›€์ด ํ•„์š”ํ•˜์‹ญ๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰