Reduce rest setup code (#48062)

- Switch to storing each platform config/rest data in a list
This commit is contained in:
J. Nick Koston 2021-03-17 22:55:38 -10:00 committed by GitHub
parent 333f5da036
commit fea0e39fa0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 16 deletions

View File

@ -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:

View File

@ -17,4 +17,6 @@ PLATFORM_IDX = "platform_idx"
COORDINATOR = "coordinator"
REST = "rest"
REST_DATA = "rest_data"
METHODS = ["POST", "GET"]