/
/
/
1"""Setup flow for the SiriusXM 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.siriusxm import (
13 CONF_SXM_PASSWORD,
14 CONF_SXM_REGION,
15 CONF_SXM_USERNAME,
16)
17
18if TYPE_CHECKING:
19 from music_assistant.models.setup_flow import SetupSession
20
21_ENTRIES = (
22 ConfigEntry(key=CONF_SXM_USERNAME, type=ConfigEntryType.STRING, required=True),
23 ConfigEntry(key=CONF_SXM_PASSWORD, type=ConfigEntryType.SECURE_STRING, required=True),
24 ConfigEntry(
25 key=CONF_SXM_REGION,
26 type=ConfigEntryType.STRING,
27 default_value="US",
28 options=[
29 ConfigValueOption("US"),
30 ConfigValueOption("CA"),
31 ],
32 required=True,
33 ),
34)
35
36
37async def run_setup(session: SetupSession) -> None:
38 """Run the setup flow: collect the credentials 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