mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 01:38:02 +00:00
Reduce rest setup code (#48062)
- Switch to storing each platform config/rest data in a list
This commit is contained in:
parent
333f5da036
commit
fea0e39fa0
@ -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:
|
||||
|
||||
|
@ -17,4 +17,6 @@ PLATFORM_IDX = "platform_idx"
|
||||
COORDINATOR = "coordinator"
|
||||
REST = "rest"
|
||||
|
||||
REST_DATA = "rest_data"
|
||||
|
||||
METHODS = ["POST", "GET"]
|
||||
|
Loading…
x
Reference in New Issue
Block a user