mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 04:07:08 +00:00
Simplify service registration in recorder (#146237)
This commit is contained in:
parent
f4e5036275
commit
aca0e69081
@ -45,7 +45,7 @@ from .const import ( # noqa: F401
|
|||||||
SupportedDialect,
|
SupportedDialect,
|
||||||
)
|
)
|
||||||
from .core import Recorder
|
from .core import Recorder
|
||||||
from .services import async_register_services
|
from .services import async_setup_services
|
||||||
from .tasks import AddRecorderPlatformTask
|
from .tasks import AddRecorderPlatformTask
|
||||||
from .util import get_instance
|
from .util import get_instance
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
instance.async_initialize()
|
instance.async_initialize()
|
||||||
instance.async_register()
|
instance.async_register()
|
||||||
instance.start()
|
instance.start()
|
||||||
async_register_services(hass, instance)
|
async_setup_services(hass)
|
||||||
websocket_api.async_setup(hass)
|
websocket_api.async_setup(hass)
|
||||||
|
|
||||||
await _async_setup_integration_platform(hass, instance)
|
await _async_setup_integration_platform(hass, instance)
|
||||||
|
@ -17,6 +17,7 @@ from homeassistant.core import (
|
|||||||
)
|
)
|
||||||
from homeassistant.helpers import config_validation as cv
|
from homeassistant.helpers import config_validation as cv
|
||||||
from homeassistant.helpers.entityfilter import generate_filter
|
from homeassistant.helpers.entityfilter import generate_filter
|
||||||
|
from homeassistant.helpers.recorder import DATA_INSTANCE
|
||||||
from homeassistant.helpers.service import (
|
from homeassistant.helpers.service import (
|
||||||
async_extract_entity_ids,
|
async_extract_entity_ids,
|
||||||
async_register_admin_service,
|
async_register_admin_service,
|
||||||
@ -25,7 +26,6 @@ from homeassistant.util import dt as dt_util
|
|||||||
from homeassistant.util.json import JsonArrayType, JsonObjectType
|
from homeassistant.util.json import JsonArrayType, JsonObjectType
|
||||||
|
|
||||||
from .const import ATTR_APPLY_FILTER, ATTR_KEEP_DAYS, ATTR_REPACK, DOMAIN
|
from .const import ATTR_APPLY_FILTER, ATTR_KEEP_DAYS, ATTR_REPACK, DOMAIN
|
||||||
from .core import Recorder
|
|
||||||
from .statistics import statistics_during_period
|
from .statistics import statistics_during_period
|
||||||
from .tasks import PurgeEntitiesTask, PurgeTask
|
from .tasks import PurgeEntitiesTask, PurgeTask
|
||||||
|
|
||||||
@ -87,10 +87,10 @@ SERVICE_GET_STATISTICS_SCHEMA = vol.Schema(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@callback
|
async def _async_handle_purge_service(service: ServiceCall) -> None:
|
||||||
def _async_register_purge_service(hass: HomeAssistant, instance: Recorder) -> None:
|
|
||||||
async def async_handle_purge_service(service: ServiceCall) -> None:
|
|
||||||
"""Handle calls to the purge service."""
|
"""Handle calls to the purge service."""
|
||||||
|
hass = service.hass
|
||||||
|
instance = hass.data[DATA_INSTANCE]
|
||||||
kwargs = service.data
|
kwargs = service.data
|
||||||
keep_days = kwargs.get(ATTR_KEEP_DAYS, instance.keep_days)
|
keep_days = kwargs.get(ATTR_KEEP_DAYS, instance.keep_days)
|
||||||
repack = cast(bool, kwargs[ATTR_REPACK])
|
repack = cast(bool, kwargs[ATTR_REPACK])
|
||||||
@ -98,79 +98,35 @@ def _async_register_purge_service(hass: HomeAssistant, instance: Recorder) -> No
|
|||||||
purge_before = dt_util.utcnow() - timedelta(days=keep_days)
|
purge_before = dt_util.utcnow() - timedelta(days=keep_days)
|
||||||
instance.queue_task(PurgeTask(purge_before, repack, apply_filter))
|
instance.queue_task(PurgeTask(purge_before, repack, apply_filter))
|
||||||
|
|
||||||
async_register_admin_service(
|
|
||||||
hass,
|
|
||||||
DOMAIN,
|
|
||||||
SERVICE_PURGE,
|
|
||||||
async_handle_purge_service,
|
|
||||||
schema=SERVICE_PURGE_SCHEMA,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
async def _async_handle_purge_entities_service(service: ServiceCall) -> None:
|
||||||
@callback
|
|
||||||
def _async_register_purge_entities_service(
|
|
||||||
hass: HomeAssistant, instance: Recorder
|
|
||||||
) -> None:
|
|
||||||
async def async_handle_purge_entities_service(service: ServiceCall) -> None:
|
|
||||||
"""Handle calls to the purge entities service."""
|
"""Handle calls to the purge entities service."""
|
||||||
|
hass = service.hass
|
||||||
entity_ids = await async_extract_entity_ids(hass, service)
|
entity_ids = await async_extract_entity_ids(hass, service)
|
||||||
domains = service.data.get(ATTR_DOMAINS, [])
|
domains = service.data.get(ATTR_DOMAINS, [])
|
||||||
keep_days = service.data.get(ATTR_KEEP_DAYS, 0)
|
keep_days = service.data.get(ATTR_KEEP_DAYS, 0)
|
||||||
entity_globs = service.data.get(ATTR_ENTITY_GLOBS, [])
|
entity_globs = service.data.get(ATTR_ENTITY_GLOBS, [])
|
||||||
entity_filter = generate_filter(domains, list(entity_ids), [], [], entity_globs)
|
entity_filter = generate_filter(domains, list(entity_ids), [], [], entity_globs)
|
||||||
purge_before = dt_util.utcnow() - timedelta(days=keep_days)
|
purge_before = dt_util.utcnow() - timedelta(days=keep_days)
|
||||||
instance.queue_task(PurgeEntitiesTask(entity_filter, purge_before))
|
hass.data[DATA_INSTANCE].queue_task(PurgeEntitiesTask(entity_filter, purge_before))
|
||||||
|
|
||||||
async_register_admin_service(
|
|
||||||
hass,
|
|
||||||
DOMAIN,
|
|
||||||
SERVICE_PURGE_ENTITIES,
|
|
||||||
async_handle_purge_entities_service,
|
|
||||||
schema=SERVICE_PURGE_ENTITIES_SCHEMA,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@callback
|
async def _async_handle_enable_service(service: ServiceCall) -> None:
|
||||||
def _async_register_enable_service(hass: HomeAssistant, instance: Recorder) -> None:
|
service.hass.data[DATA_INSTANCE].set_enable(True)
|
||||||
async def async_handle_enable_service(service: ServiceCall) -> None:
|
|
||||||
instance.set_enable(True)
|
|
||||||
|
|
||||||
async_register_admin_service(
|
|
||||||
hass,
|
|
||||||
DOMAIN,
|
|
||||||
SERVICE_ENABLE,
|
|
||||||
async_handle_enable_service,
|
|
||||||
schema=SERVICE_ENABLE_SCHEMA,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@callback
|
async def _async_handle_disable_service(service: ServiceCall) -> None:
|
||||||
def _async_register_disable_service(hass: HomeAssistant, instance: Recorder) -> None:
|
service.hass.data[DATA_INSTANCE].set_enable(False)
|
||||||
async def async_handle_disable_service(service: ServiceCall) -> None:
|
|
||||||
instance.set_enable(False)
|
|
||||||
|
|
||||||
async_register_admin_service(
|
|
||||||
hass,
|
|
||||||
DOMAIN,
|
|
||||||
SERVICE_DISABLE,
|
|
||||||
async_handle_disable_service,
|
|
||||||
schema=SERVICE_DISABLE_SCHEMA,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@callback
|
async def _async_handle_get_statistics_service(
|
||||||
def _async_register_get_statistics_service(
|
|
||||||
hass: HomeAssistant, instance: Recorder
|
|
||||||
) -> None:
|
|
||||||
async def async_handle_get_statistics_service(
|
|
||||||
service: ServiceCall,
|
service: ServiceCall,
|
||||||
) -> ServiceResponse:
|
) -> ServiceResponse:
|
||||||
"""Handle calls to the get_statistics service."""
|
"""Handle calls to the get_statistics service."""
|
||||||
|
hass = service.hass
|
||||||
start_time = dt_util.as_utc(service.data["start_time"])
|
start_time = dt_util.as_utc(service.data["start_time"])
|
||||||
end_time = (
|
end_time = (
|
||||||
dt_util.as_utc(service.data["end_time"])
|
dt_util.as_utc(service.data["end_time"]) if "end_time" in service.data else None
|
||||||
if "end_time" in service.data
|
|
||||||
else None
|
|
||||||
)
|
)
|
||||||
|
|
||||||
statistic_ids = service.data["statistic_ids"]
|
statistic_ids = service.data["statistic_ids"]
|
||||||
@ -178,7 +134,7 @@ def _async_register_get_statistics_service(
|
|||||||
period = service.data["period"]
|
period = service.data["period"]
|
||||||
units = service.data.get("units")
|
units = service.data.get("units")
|
||||||
|
|
||||||
result = await instance.async_add_executor_job(
|
result = await hass.data[DATA_INSTANCE].async_add_executor_job(
|
||||||
statistics_during_period,
|
statistics_during_period,
|
||||||
hass,
|
hass,
|
||||||
start_time,
|
start_time,
|
||||||
@ -221,21 +177,47 @@ def _async_register_get_statistics_service(
|
|||||||
|
|
||||||
return {"statistics": formatted_result}
|
return {"statistics": formatted_result}
|
||||||
|
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def async_setup_services(hass: HomeAssistant) -> None:
|
||||||
|
"""Register recorder services."""
|
||||||
|
async_register_admin_service(
|
||||||
|
hass,
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_PURGE,
|
||||||
|
_async_handle_purge_service,
|
||||||
|
schema=SERVICE_PURGE_SCHEMA,
|
||||||
|
)
|
||||||
|
|
||||||
|
async_register_admin_service(
|
||||||
|
hass,
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_PURGE_ENTITIES,
|
||||||
|
_async_handle_purge_entities_service,
|
||||||
|
schema=SERVICE_PURGE_ENTITIES_SCHEMA,
|
||||||
|
)
|
||||||
|
|
||||||
|
async_register_admin_service(
|
||||||
|
hass,
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_ENABLE,
|
||||||
|
_async_handle_enable_service,
|
||||||
|
schema=SERVICE_ENABLE_SCHEMA,
|
||||||
|
)
|
||||||
|
|
||||||
|
async_register_admin_service(
|
||||||
|
hass,
|
||||||
|
DOMAIN,
|
||||||
|
SERVICE_DISABLE,
|
||||||
|
_async_handle_disable_service,
|
||||||
|
schema=SERVICE_DISABLE_SCHEMA,
|
||||||
|
)
|
||||||
|
|
||||||
async_register_admin_service(
|
async_register_admin_service(
|
||||||
hass,
|
hass,
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
SERVICE_GET_STATISTICS,
|
SERVICE_GET_STATISTICS,
|
||||||
async_handle_get_statistics_service,
|
_async_handle_get_statistics_service,
|
||||||
schema=SERVICE_GET_STATISTICS_SCHEMA,
|
schema=SERVICE_GET_STATISTICS_SCHEMA,
|
||||||
supports_response=SupportsResponse.ONLY,
|
supports_response=SupportsResponse.ONLY,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@callback
|
|
||||||
def async_register_services(hass: HomeAssistant, instance: Recorder) -> None:
|
|
||||||
"""Register recorder services."""
|
|
||||||
_async_register_purge_service(hass, instance)
|
|
||||||
_async_register_purge_entities_service(hass, instance)
|
|
||||||
_async_register_enable_service(hass, instance)
|
|
||||||
_async_register_disable_service(hass, instance)
|
|
||||||
_async_register_get_statistics_service(hass, instance)
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user