mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 03:37:07 +00:00
Simplify google calendar event filters (#67312)
Simplify google calendar event filtering logic currently copied between two methods.
This commit is contained in:
parent
f6be0c2b88
commit
1383034df2
@ -41,6 +41,12 @@ DEFAULT_GOOGLE_SEARCH_PARAMS = {
|
|||||||
|
|
||||||
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15)
|
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15)
|
||||||
|
|
||||||
|
# Events have a transparency that determine whether or not they block time on calendar.
|
||||||
|
# When an event is opaque, it means "Show me as busy" which is the default. Events that
|
||||||
|
# are not opaque are ignored by default.
|
||||||
|
TRANSPARENCY = "transparency"
|
||||||
|
OPAQUE = "opaque"
|
||||||
|
|
||||||
|
|
||||||
def setup_platform(
|
def setup_platform(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
@ -161,6 +167,12 @@ class GoogleCalendarData:
|
|||||||
|
|
||||||
return service, params
|
return service, params
|
||||||
|
|
||||||
|
def _event_filter(self, event: dict[str, Any]) -> bool:
|
||||||
|
"""Return True if the event is visible."""
|
||||||
|
if self.ignore_availability:
|
||||||
|
return True
|
||||||
|
return event.get(TRANSPARENCY, OPAQUE) == OPAQUE
|
||||||
|
|
||||||
async def async_get_events(
|
async def async_get_events(
|
||||||
self, hass: HomeAssistant, start_date: datetime, end_date: datetime
|
self, hass: HomeAssistant, start_date: datetime, end_date: datetime
|
||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, Any]]:
|
||||||
@ -195,12 +207,8 @@ class GoogleCalendarData:
|
|||||||
result = await hass.async_add_executor_job(events.list(**params).execute)
|
result = await hass.async_add_executor_job(events.list(**params).execute)
|
||||||
|
|
||||||
items = result.get("items", [])
|
items = result.get("items", [])
|
||||||
for item in items:
|
visible_items = filter(self._event_filter, items)
|
||||||
if not self.ignore_availability and "transparency" in item:
|
event_list.extend(visible_items)
|
||||||
if item["transparency"] == "opaque":
|
|
||||||
event_list.append(item)
|
|
||||||
else:
|
|
||||||
event_list.append(item)
|
|
||||||
return result.get("nextPageToken")
|
return result.get("nextPageToken")
|
||||||
|
|
||||||
@Throttle(MIN_TIME_BETWEEN_UPDATES)
|
@Throttle(MIN_TIME_BETWEEN_UPDATES)
|
||||||
@ -215,15 +223,5 @@ class GoogleCalendarData:
|
|||||||
result = events.list(**params).execute()
|
result = events.list(**params).execute()
|
||||||
|
|
||||||
items = result.get("items", [])
|
items = result.get("items", [])
|
||||||
|
valid_events = filter(self._event_filter, items)
|
||||||
new_event = None
|
self.event = next(valid_events, None)
|
||||||
for item in items:
|
|
||||||
if not self.ignore_availability and "transparency" in item:
|
|
||||||
if item["transparency"] == "opaque":
|
|
||||||
new_event = item
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
new_event = item
|
|
||||||
break
|
|
||||||
|
|
||||||
self.event = new_event
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user