mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Limit fields returned for the list events service (#95506)
* Limit fields returned for the list events service * Update websocket tests and fix bugs in response fields * Omit 'None' fields in the list events response
This commit is contained in:
parent
63218adb65
commit
7252c33df8
@ -60,6 +60,7 @@ from .const import (
|
|||||||
EVENT_TIME_FIELDS,
|
EVENT_TIME_FIELDS,
|
||||||
EVENT_TYPES,
|
EVENT_TYPES,
|
||||||
EVENT_UID,
|
EVENT_UID,
|
||||||
|
LIST_EVENT_FIELDS,
|
||||||
CalendarEntityFeature,
|
CalendarEntityFeature,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -415,6 +416,17 @@ def _api_event_dict_factory(obj: Iterable[tuple[str, Any]]) -> dict[str, Any]:
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def _list_events_dict_factory(
|
||||||
|
obj: Iterable[tuple[str, Any]]
|
||||||
|
) -> dict[str, JsonValueType]:
|
||||||
|
"""Convert CalendarEvent dataclass items to dictionary of attributes."""
|
||||||
|
return {
|
||||||
|
name: value
|
||||||
|
for name, value in obj
|
||||||
|
if name in LIST_EVENT_FIELDS and value is not None
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def _get_datetime_local(
|
def _get_datetime_local(
|
||||||
dt_or_d: datetime.datetime | datetime.date,
|
dt_or_d: datetime.datetime | datetime.date,
|
||||||
) -> datetime.datetime:
|
) -> datetime.datetime:
|
||||||
@ -782,9 +794,9 @@ async def async_list_events_service(
|
|||||||
else:
|
else:
|
||||||
end = service_call.data[EVENT_END_DATETIME]
|
end = service_call.data[EVENT_END_DATETIME]
|
||||||
calendar_event_list = await calendar.async_get_events(calendar.hass, start, end)
|
calendar_event_list = await calendar.async_get_events(calendar.hass, start, end)
|
||||||
events: list[JsonValueType] = [
|
|
||||||
dataclasses.asdict(event) for event in calendar_event_list
|
|
||||||
]
|
|
||||||
return {
|
return {
|
||||||
"events": events,
|
"events": [
|
||||||
|
dataclasses.asdict(event, dict_factory=_list_events_dict_factory)
|
||||||
|
for event in calendar_event_list
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@ -41,3 +41,12 @@ EVENT_TIME_FIELDS = {
|
|||||||
}
|
}
|
||||||
EVENT_TYPES = "event_types"
|
EVENT_TYPES = "event_types"
|
||||||
EVENT_DURATION = "duration"
|
EVENT_DURATION = "duration"
|
||||||
|
|
||||||
|
# Fields for the list events service
|
||||||
|
LIST_EVENT_FIELDS = {
|
||||||
|
"start",
|
||||||
|
"end",
|
||||||
|
EVENT_SUMMARY,
|
||||||
|
EVENT_DESCRIPTION,
|
||||||
|
EVENT_LOCATION,
|
||||||
|
}
|
||||||
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import Any
|
from typing import Any
|
||||||
from unittest.mock import patch
|
from unittest.mock import ANY, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
@ -405,11 +405,17 @@ async def test_list_events_service(hass: HomeAssistant) -> None:
|
|||||||
blocking=True,
|
blocking=True,
|
||||||
return_response=True,
|
return_response=True,
|
||||||
)
|
)
|
||||||
assert response
|
assert response == {
|
||||||
assert "events" in response
|
"events": [
|
||||||
events = response["events"]
|
{
|
||||||
assert len(events) == 1
|
"start": ANY,
|
||||||
assert events[0]["summary"] == "Future Event"
|
"end": ANY,
|
||||||
|
"summary": "Future Event",
|
||||||
|
"description": "Future Description",
|
||||||
|
"location": "Future Location",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
|
@ -1769,9 +1769,6 @@ async def test_execute_script_complex_response(
|
|||||||
"summary": "Future Event",
|
"summary": "Future Event",
|
||||||
"description": "Future Description",
|
"description": "Future Description",
|
||||||
"location": "Future Location",
|
"location": "Future Location",
|
||||||
"uid": None,
|
|
||||||
"recurrence_id": None,
|
|
||||||
"rrule": None,
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user