diff --git a/homeassistant/components/nzbget/__init__.py b/homeassistant/components/nzbget/__init__.py index e9e5856d524..cb4350b68d5 100644 --- a/homeassistant/components/nzbget/__init__.py +++ b/homeassistant/components/nzbget/__init__.py @@ -1,30 +1,25 @@ """The NZBGet integration.""" -import voluptuous as vol - from homeassistant.config_entries import ConfigEntry from homeassistant.const import Platform -from homeassistant.core import HomeAssistant, ServiceCall +from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv +from homeassistant.helpers.typing import ConfigType -from .const import ( - ATTR_SPEED, - DATA_COORDINATOR, - DATA_UNDO_UPDATE_LISTENER, - DEFAULT_SPEED_LIMIT, - DOMAIN, - SERVICE_PAUSE, - SERVICE_RESUME, - SERVICE_SET_SPEED, -) +from .const import DATA_COORDINATOR, DATA_UNDO_UPDATE_LISTENER, DOMAIN from .coordinator import NZBGetDataUpdateCoordinator +from .services import async_register_services +CONFIG_SCHEMA = cv.config_entry_only_config_schema(DOMAIN) PLATFORMS = [Platform.SENSOR, Platform.SWITCH] -SPEED_LIMIT_SCHEMA = vol.Schema( - {vol.Optional(ATTR_SPEED, default=DEFAULT_SPEED_LIMIT): cv.positive_int} -) +async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: + """Set up NZBGet integration.""" + + async_register_services(hass) + + return True async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: @@ -44,8 +39,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) - _async_register_services(hass, coordinator) - return True @@ -60,31 +53,6 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: return unload_ok -def _async_register_services( - hass: HomeAssistant, - coordinator: NZBGetDataUpdateCoordinator, -) -> None: - """Register integration-level services.""" - - def pause(call: ServiceCall) -> None: - """Service call to pause downloads in NZBGet.""" - coordinator.nzbget.pausedownload() - - def resume(call: ServiceCall) -> None: - """Service call to resume downloads in NZBGet.""" - coordinator.nzbget.resumedownload() - - def set_speed(call: ServiceCall) -> None: - """Service call to rate limit speeds in NZBGet.""" - coordinator.nzbget.rate(call.data[ATTR_SPEED]) - - hass.services.async_register(DOMAIN, SERVICE_PAUSE, pause, schema=vol.Schema({})) - hass.services.async_register(DOMAIN, SERVICE_RESUME, resume, schema=vol.Schema({})) - hass.services.async_register( - DOMAIN, SERVICE_SET_SPEED, set_speed, schema=SPEED_LIMIT_SCHEMA - ) - - async def _async_update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None: """Handle options update.""" await hass.config_entries.async_reload(entry.entry_id) diff --git a/homeassistant/components/nzbget/services.py b/homeassistant/components/nzbget/services.py new file mode 100644 index 00000000000..afa6f06d086 --- /dev/null +++ b/homeassistant/components/nzbget/services.py @@ -0,0 +1,58 @@ +"""The NZBGet integration.""" + +import voluptuous as vol + +from homeassistant.core import HomeAssistant, ServiceCall +from homeassistant.exceptions import ServiceValidationError +from homeassistant.helpers import config_validation as cv + +from .const import ( + ATTR_SPEED, + DATA_COORDINATOR, + DEFAULT_SPEED_LIMIT, + DOMAIN, + SERVICE_PAUSE, + SERVICE_RESUME, + SERVICE_SET_SPEED, +) +from .coordinator import NZBGetDataUpdateCoordinator + +SPEED_LIMIT_SCHEMA = vol.Schema( + {vol.Optional(ATTR_SPEED, default=DEFAULT_SPEED_LIMIT): cv.positive_int} +) + + +def _get_coordinator(call: ServiceCall) -> NZBGetDataUpdateCoordinator: + """Service call to pause downloads in NZBGet.""" + entries = call.hass.config_entries.async_loaded_entries(DOMAIN) + if not entries: + raise ServiceValidationError( + translation_domain=DOMAIN, + translation_key="invalid_config_entry", + ) + return call.hass.data[DOMAIN][entries[0].entry_id][DATA_COORDINATOR] + + +def pause(call: ServiceCall) -> None: + """Service call to pause downloads in NZBGet.""" + _get_coordinator(call).nzbget.pausedownload() + + +def resume(call: ServiceCall) -> None: + """Service call to resume downloads in NZBGet.""" + _get_coordinator(call).nzbget.resumedownload() + + +def set_speed(call: ServiceCall) -> None: + """Service call to rate limit speeds in NZBGet.""" + _get_coordinator(call).nzbget.rate(call.data[ATTR_SPEED]) + + +def async_register_services(hass: HomeAssistant) -> None: + """Register integration-level services.""" + + hass.services.async_register(DOMAIN, SERVICE_PAUSE, pause, schema=vol.Schema({})) + hass.services.async_register(DOMAIN, SERVICE_RESUME, resume, schema=vol.Schema({})) + hass.services.async_register( + DOMAIN, SERVICE_SET_SPEED, set_speed, schema=SPEED_LIMIT_SCHEMA + ) diff --git a/homeassistant/components/nzbget/strings.json b/homeassistant/components/nzbget/strings.json index 84a2ed0b821..3b41e798d22 100644 --- a/homeassistant/components/nzbget/strings.json +++ b/homeassistant/components/nzbget/strings.json @@ -64,6 +64,11 @@ } } }, + "exceptions": { + "invalid_config_entry": { + "message": "Config entry not found or not loaded!" + } + }, "services": { "pause": { "name": "[%key:common::action::pause%]",