/
/
/
1"""Setup flow for the Zvuk Music 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
9from music_assistant_models.enums import ConfigEntryType
10
11from music_assistant.constants import CONF_ENTRY_UNOFFICIAL_PROVIDER
12from music_assistant.models.setup_flow import SetupFlowError
13
14from .constants import CONF_TOKEN
15
16if TYPE_CHECKING:
17 from music_assistant.models.setup_flow import SetupSession
18
19_ENTRIES = (
20 CONF_ENTRY_UNOFFICIAL_PROVIDER,
21 ConfigEntry(key=CONF_TOKEN, type=ConfigEntryType.SECURE_STRING, required=True),
22)
23
24
25async def run_setup(session: SetupSession) -> None:
26 """
27 Run the setup flow: collect the Zvuk auth token and create the provider.
28
29 :param session: The setup session driving the flow.
30 """
31 errors: dict[str, str] | None = None
32 setup_data = dict(session.context.setup_data)
33 while True:
34 entries = [
35 replace(entry, value=setup_data.get(entry.key, entry.value)) for entry in _ENTRIES
36 ]
37 submitted = await session.form(entries, step_id="user", errors=errors, last_step=True)
38 setup_data.update(submitted)
39 try:
40 await session.finish(setup_data)
41 return
42 except SetupFlowError as err:
43 errors = {"base": err.translation_key or str(err)}
44