mirror of
https://github.com/home-assistant/core
synced 2024-08-02 23:40:32 +02: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.reload import async_reload_integration_platforms
|
||||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
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 .data import RestData
|
||||||
from .schema import CONFIG_SCHEMA # noqa: F401
|
from .schema import CONFIG_SCHEMA # noqa: F401
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ async def async_setup(hass: HomeAssistant, config: dict):
|
|||||||
@callback
|
@callback
|
||||||
def _async_setup_shared_data(hass: HomeAssistant):
|
def _async_setup_shared_data(hass: HomeAssistant):
|
||||||
"""Create shared data for platform config and rest coordinators."""
|
"""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:
|
async def _async_process_config(hass, config) -> bool:
|
||||||
@ -77,29 +77,21 @@ async def _async_process_config(hass, config) -> bool:
|
|||||||
|
|
||||||
refresh_tasks = []
|
refresh_tasks = []
|
||||||
load_tasks = []
|
load_tasks = []
|
||||||
platform_idxs = {}
|
|
||||||
for rest_idx, conf in enumerate(config[DOMAIN]):
|
for rest_idx, conf in enumerate(config[DOMAIN]):
|
||||||
scan_interval = conf.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
|
scan_interval = conf.get(CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL)
|
||||||
resource_template = conf.get(CONF_RESOURCE_TEMPLATE)
|
resource_template = conf.get(CONF_RESOURCE_TEMPLATE)
|
||||||
rest = create_rest_data_from_config(hass, conf)
|
rest = create_rest_data_from_config(hass, conf)
|
||||||
coordinator = _wrap_rest_in_coordinator(
|
coordinator = _rest_coordinator(hass, rest, resource_template, scan_interval)
|
||||||
hass, rest, resource_template, scan_interval
|
|
||||||
)
|
|
||||||
refresh_tasks.append(coordinator.async_refresh())
|
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:
|
for platform_domain in COORDINATOR_AWARE_PLATFORMS:
|
||||||
if platform_domain not in conf:
|
if platform_domain not in conf:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for platform_conf in conf[platform_domain]:
|
for platform_conf in conf[platform_domain]:
|
||||||
if platform_domain not in platform_idxs:
|
hass.data[DOMAIN][platform_domain].append(platform_conf)
|
||||||
platform_idxs[platform_domain] = 0
|
platform_idx = len(hass.data[DOMAIN][platform_domain]) - 1
|
||||||
else:
|
|
||||||
platform_idxs[platform_domain] += 1
|
|
||||||
platform_idx = platform_idxs[platform_domain]
|
|
||||||
|
|
||||||
hass.data[DOMAIN][platform_domain][platform_idx] = platform_conf
|
|
||||||
|
|
||||||
load = discovery.async_load_platform(
|
load = discovery.async_load_platform(
|
||||||
hass,
|
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):
|
async def async_get_config_and_coordinator(hass, platform_domain, discovery_info):
|
||||||
"""Get the config and coordinator for the platform from discovery."""
|
"""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]]
|
conf = hass.data[DOMAIN][platform_domain][discovery_info[PLATFORM_IDX]]
|
||||||
coordinator = shared_data[COORDINATOR]
|
coordinator = shared_data[COORDINATOR]
|
||||||
rest = shared_data[REST]
|
rest = shared_data[REST]
|
||||||
@ -130,7 +122,7 @@ async def async_get_config_and_coordinator(hass, platform_domain, discovery_info
|
|||||||
return conf, coordinator, rest
|
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."""
|
"""Wrap a DataUpdateCoordinator around the rest object."""
|
||||||
if resource_template:
|
if resource_template:
|
||||||
|
|
||||||
|
@ -17,4 +17,6 @@ PLATFORM_IDX = "platform_idx"
|
|||||||
COORDINATOR = "coordinator"
|
COORDINATOR = "coordinator"
|
||||||
REST = "rest"
|
REST = "rest"
|
||||||
|
|
||||||
|
REST_DATA = "rest_data"
|
||||||
|
|
||||||
METHODS = ["POST", "GET"]
|
METHODS = ["POST", "GET"]
|
||||||
|
Loading…
Reference in New Issue
Block a user