File: /volume1/docker/homeassistant2025/custom_components/reaper/config_flow.py
"""Adds config flow for Reaper."""
from __future__ import annotations
import asyncio
from typing import Any
from aiohttp.client_exceptions import ClientConnectorError
import async_timeout
from reaperdaw import Reaper, ReaperError
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.data_entry_flow import FlowResult
from homeassistant.helpers.aiohttp_client import async_get_clientsession
from .const import (
CONF_HOSTNAME,
CONF_PASSWORD,
CONF_PORT,
CONF_UPDATE_INTERVAL,
CONF_USERNAME,
DEFAULT_PORT,
DEFAULT_UPDATE_INTERVAL,
DOMAIN,
)
class ReaperFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): # type: ignore[call-arg]
"""Config flow for Reaper."""
VERSION = 1
async def async_step_user(
self, user_input: dict[str, Any] | None = None
) -> FlowResult:
"""Handle a flow initialized by the user."""
errors = {}
websession = async_get_clientsession(self.hass)
if user_input is not None:
await self.async_set_unique_id(str(user_input[CONF_HOSTNAME]))
self._abort_if_unique_id_configured()
try:
reaperdaw = Reaper(
websession,
user_input[CONF_HOSTNAME],
user_input[CONF_PORT],
user_input[CONF_USERNAME],
user_input[CONF_PASSWORD],
)
with async_timeout.timeout(10):
await reaperdaw.getStatus()
except (ReaperError, ClientConnectorError, asyncio.TimeoutError):
errors["base"] = "cannot_connect"
else:
return self.async_create_entry(
title=user_input[CONF_HOSTNAME],
data={
CONF_HOSTNAME: user_input[CONF_HOSTNAME],
CONF_PORT: user_input[CONF_PORT],
CONF_USERNAME: user_input[CONF_USERNAME],
CONF_PASSWORD: user_input[CONF_PASSWORD],
CONF_UPDATE_INTERVAL: user_input[CONF_UPDATE_INTERVAL],
},
)
return self.async_show_form(
step_id="user",
data_schema=vol.Schema(
{
vol.Required(CONF_HOSTNAME): str,
vol.Required(CONF_PORT, default=DEFAULT_PORT): int,
vol.Optional(CONF_USERNAME, default=""): str,
vol.Optional(CONF_PASSWORD, default=""): str,
vol.Required(
CONF_UPDATE_INTERVAL, default=DEFAULT_UPDATE_INTERVAL
): int,
}
),
errors=errors,
)