music-assistant-server

1.8 KBPY
setup_flow.py
1.8 KB52 lines • python
1"""Setup flow for the WebDAV 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.constants import CONF_PASSWORD, CONF_USERNAME
12from music_assistant.models.setup_flow import SetupFlowError
13
14from .constants import CONF_CONTENT_TYPE, CONF_URL, CONF_VERIFY_SSL
15
16if TYPE_CHECKING:
17    from music_assistant.models.setup_flow import SetupSession
18
19_ENTRIES = (
20    ConfigEntry(
21        key=CONF_CONTENT_TYPE,
22        type=ConfigEntryType.STRING,
23        options=[
24            ConfigValueOption("music"),
25            ConfigValueOption("audiobooks"),
26            ConfigValueOption("podcasts"),
27        ],
28        default_value="music",
29    ),
30    ConfigEntry(key=CONF_URL, type=ConfigEntryType.STRING, required=True),
31    ConfigEntry(key=CONF_USERNAME, type=ConfigEntryType.STRING, required=False),
32    ConfigEntry(key=CONF_PASSWORD, type=ConfigEntryType.SECURE_STRING, required=False),
33    ConfigEntry(key=CONF_VERIFY_SSL, type=ConfigEntryType.BOOLEAN, default_value=False),
34)
35
36
37async def run_setup(session: SetupSession) -> None:
38    """Run the setup flow: collect the WebDAV connection details and create the provider."""
39    errors: dict[str, str] | None = None
40    setup_data = dict(session.context.setup_data)
41    while True:
42        entries = [
43            replace(entry, value=setup_data.get(entry.key, entry.value)) for entry in _ENTRIES
44        ]
45        submitted = await session.form(entries, step_id="user", errors=errors, last_step=True)
46        setup_data.update(submitted)
47        try:
48            await session.finish(setup_data)
49            return
50        except SetupFlowError as err:
51            errors = {"base": err.translation_key or str(err)}
52