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์ ๋๋ ํฐ๋ฆฌ๊ฐ ์๋๋๋ค.
์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ฒฝ๋ก ์ด๋ฆ์ ๋ํด ์ด๋ ํ ๊ฐ์ ๋ ํด์๋ ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ค์ด ํฉ๋ฒ์ ์ผ๋ก ๊ณต๋ฐฑ ๋ฌธ์๋ก ๋๋๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, ๊ทธ๋ค์ ๊ทธ๊ฒ์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ ์ ์์ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์ค๋ฅ ๋ฉ์์ง์์ ๊ฒฝ๋ก๋ฅผ ๋ ์ ๋ํ๋ด๋ ๊ฒ์ ํ์คํ ์ข์ ์๊ฐ์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์๋ํ์ง ์์์ง๋ง ์ฐ๋ฆฌ์ 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
๊ตฌ์ฒด์ ์ผ๋ก ํน๋ณํ:
String
๋ฐ List
์ ํ์ ์
๋ฐ์ดํธํฉ๋๋ค.Pair
์ ํ์ ๊ตฌํํฉ๋๋ค.๋ํ ์ฌ๊ธฐ์ ์ด โโ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
https://github.com/mopidy/mopidy/blob/develop/tests/config/test_types.py
์๋ฃ๋๋ฉด ํ์ผ ํ์ฅ์๋ฅผ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. __init__.py
์ ๊ตฌ์ฑ ์ ์๋ ์์ ์์ ๊ฐ์ด ์
๋ฐ์ดํธ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด library.py
์ ๋ฏธ๋์ด ๋๋ ํ ๋ฆฌ ๊ตฌ๋ฌธ ๋ถ์ ์ฝ๋๋ฅผ ๋ํญ ๊ฐ์ํํ ์ ์์ต๋๋ค.
๋ ๋ง์ ๋์์ด๋ ์กฐ์ธ์ด ํ์ํ๊ฑฐ๋ ์ ๊ฐ ์์ฑํ ๋ด์ฉ์ด ์ดํด๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ ์๋ ค์ฃผ์ญ์์ค.
@djmattyg007 ์ค๋ช
@abid1998 ์ด๋ฒ ์ ๋ฐ์ดํธ๋ ์ด๋ป๊ฒ ํ๊ณ ๊ณ์ ๊ฐ์? ๋์์ด ํ์ํ์ญ๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@djmattyg007 ์ค๋ช