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