From fea0e39fa0d8c5650eadb2de765e47e163650838 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 17 Mar 2021 22:55:38 -1000 Subject: [PATCH] Reduce rest setup code (#48062) - Switch to storing each platform config/rest data in a list --- homeassistant/components/rest/__init__.py | 24 ++++++++--------------- homeassistant/components/rest/const.py | 2 ++ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/homeassistant/components/rest/__init__.py b/homeassistant/components/rest/__init__.py index 26e8fde57e0e..8b9390bb1c92 100644 --- a/homeassistant/components/rest/__init__.py +++ b/homeassistant/components/rest/__init__.py @@ -33,7 +33,7 @@ from homeassistant.helpers.entity_component import ( from homeassistant.helpers.reload import async_reload_integration_platforms from homeassistant.helpers.update_coordinator import DataUpdateCoordinator -from .const import COORDINATOR, DOMAIN, PLATFORM_IDX, REST, REST_IDX +from .const import COORDINATOR, DOMAIN, PLATFORM_IDX, REST, REST_DATA, REST_IDX from .data import RestData from .schema import CONFIG_SCHEMA # noqa: F401 @@ -67,7 +67,7 @@ async def async_setup(hass: HomeAssistant, config: dict): @callback def _async_setup_shared_data(hass: HomeAssistant): """Create shared data for platform config and rest coordinators.""" - hass.data[DOMAIN] = {platform: {} for platform in COORDINATOR_AWARE_PLATFORMS} + hass.data[DOMAIN] = {key: [] for key in [REST_DATA, *COORDINATOR_AWARE_PLATFORMS]} async def _async_process_config(hass, config) -> bool: @@ -77,29 +77,21 @@ async def _async_process_config(hass, config) -> bool: refresh_tasks = [] load_tasks = [] - platform_idxs = {} for rest_idx, conf in enumerate(config[DOMAIN]): scan_interval = conf.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL) resource_template = conf.get(CONF_RESOURCE_TEMPLATE) rest = create_rest_data_from_config(hass, conf) - coordinator = _wrap_rest_in_coordinator( - hass, rest, resource_template, scan_interval - ) + coordinator = _rest_coordinator(hass, rest, resource_template, scan_interval) refresh_tasks.append(coordinator.async_refresh()) - hass.data[DOMAIN][rest_idx] = {REST: rest, COORDINATOR: coordinator} + hass.data[DOMAIN][REST_DATA].append({REST: rest, COORDINATOR: coordinator}) for platform_domain in COORDINATOR_AWARE_PLATFORMS: if platform_domain not in conf: continue for platform_conf in conf[platform_domain]: - if platform_domain not in platform_idxs: - platform_idxs[platform_domain] = 0 - else: - platform_idxs[platform_domain] += 1 - platform_idx = platform_idxs[platform_domain] - - hass.data[DOMAIN][platform_domain][platform_idx] = platform_conf + hass.data[DOMAIN][platform_domain].append(platform_conf) + platform_idx = len(hass.data[DOMAIN][platform_domain]) - 1 load = discovery.async_load_platform( hass, @@ -121,7 +113,7 @@ async def _async_process_config(hass, config) -> bool: async def async_get_config_and_coordinator(hass, platform_domain, discovery_info): """Get the config and coordinator for the platform from discovery.""" - shared_data = hass.data[DOMAIN][discovery_info[REST_IDX]] + shared_data = hass.data[DOMAIN][REST_DATA][discovery_info[REST_IDX]] conf = hass.data[DOMAIN][platform_domain][discovery_info[PLATFORM_IDX]] coordinator = shared_data[COORDINATOR] rest = shared_data[REST] @@ -130,7 +122,7 @@ async def async_get_config_and_coordinator(hass, platform_domain, discovery_info return conf, coordinator, rest -def _wrap_rest_in_coordinator(hass, rest, resource_template, update_interval): +def _rest_coordinator(hass, rest, resource_template, update_interval): """Wrap a DataUpdateCoordinator around the rest object.""" if resource_template: diff --git a/homeassistant/components/rest/const.py b/homeassistant/components/rest/const.py index 31216b65968b..5fd32d8fba77 100644 --- a/homeassistant/components/rest/const.py +++ b/homeassistant/components/rest/const.py @@ -17,4 +17,6 @@ PLATFORM_IDX = "platform_idx" COORDINATOR = "coordinator" REST = "rest" +REST_DATA = "rest_data" + METHODS = ["POST", "GET"]