/
/
/
1"""Setup flow for the NFS filesystem provider."""
2
3from __future__ import annotations
4
5from dataclasses import replace
6from typing import TYPE_CHECKING
7
8from music_assistant_models.config_entries import ConfigEntry, ConfigValueOption
9from music_assistant_models.enums import ConfigEntryType
10
11from music_assistant.models.setup_flow import SetupFlowError
12from music_assistant.providers.filesystem_local.constants import CONF_ENTRY_CONTENT_TYPE
13
14from .constants import CONF_EXPORT_PATH, CONF_HOST, CONF_NFS_VERSION, CONF_SUBFOLDER
15
16if TYPE_CHECKING:
17 from music_assistant.models.setup_flow import SetupSession
18
19_ENTRIES = (
20 CONF_ENTRY_CONTENT_TYPE,
21 ConfigEntry(key=CONF_HOST, type=ConfigEntryType.STRING, required=True),
22 ConfigEntry(key=CONF_EXPORT_PATH, type=ConfigEntryType.STRING, required=True),
23 ConfigEntry(key=CONF_SUBFOLDER, type=ConfigEntryType.STRING, required=False, default_value=""),
24 ConfigEntry(
25 key=CONF_NFS_VERSION,
26 type=ConfigEntryType.STRING,
27 required=False,
28 advanced=True,
29 default_value="",
30 options=[
31 ConfigValueOption(""),
32 ConfigValueOption("3"),
33 ConfigValueOption("4"),
34 ConfigValueOption("4.1"),
35 ConfigValueOption("4.2"),
36 ],
37 ),
38)
39
40
41async def run_setup(session: SetupSession) -> None:
42 """Run the setup flow: collect the NFS connection details and create the provider."""
43 errors: dict[str, str] | None = None
44 setup_data = dict(session.context.setup_data)
45 while True:
46 entries = [
47 replace(entry, value=setup_data.get(entry.key, entry.value)) for entry in _ENTRIES
48 ]
49 submitted = await session.form(entries, step_id="user", errors=errors, last_step=True)
50 setup_data.update(submitted)
51 try:
52 await session.finish(setup_data)
53 return
54 except SetupFlowError as err:
55 errors = {"base": err.translation_key or str(err)}
56