mirror of
https://github.com/home-assistant/core.git
synced 2025-07-16 09:47:13 +00:00
Enable strict typing for tod (#107284)
This commit is contained in:
parent
c30bf1f6e1
commit
d0e6ce193c
@ -397,6 +397,7 @@ homeassistant.components.tile.*
|
|||||||
homeassistant.components.tilt_ble.*
|
homeassistant.components.tilt_ble.*
|
||||||
homeassistant.components.time.*
|
homeassistant.components.time.*
|
||||||
homeassistant.components.time_date.*
|
homeassistant.components.time_date.*
|
||||||
|
homeassistant.components.tod.*
|
||||||
homeassistant.components.todo.*
|
homeassistant.components.todo.*
|
||||||
homeassistant.components.tolo.*
|
homeassistant.components.tolo.*
|
||||||
homeassistant.components.tplink.*
|
homeassistant.components.tplink.*
|
||||||
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from datetime import datetime, time, timedelta
|
from datetime import datetime, time, timedelta
|
||||||
import logging
|
import logging
|
||||||
from typing import TYPE_CHECKING, Any
|
from typing import TYPE_CHECKING, Any, Literal, TypeGuard
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
@ -35,6 +35,8 @@ from .const import (
|
|||||||
CONF_BEFORE_TIME,
|
CONF_BEFORE_TIME,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
SunEventType = Literal["sunrise", "sunset"]
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
ATTR_AFTER = "after"
|
ATTR_AFTER = "after"
|
||||||
@ -60,7 +62,7 @@ async def async_setup_entry(
|
|||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize Times of the Day config entry."""
|
"""Initialize Times of the Day config entry."""
|
||||||
if hass.config.time_zone is None:
|
if hass.config.time_zone is None:
|
||||||
_LOGGER.error("Timezone is not set in Home Assistant configuration")
|
_LOGGER.error("Timezone is not set in Home Assistant configuration") # type: ignore[unreachable]
|
||||||
return
|
return
|
||||||
|
|
||||||
after = cv.time(config_entry.options[CONF_AFTER_TIME])
|
after = cv.time(config_entry.options[CONF_AFTER_TIME])
|
||||||
@ -83,7 +85,7 @@ async def async_setup_platform(
|
|||||||
) -> None:
|
) -> None:
|
||||||
"""Set up the ToD sensors."""
|
"""Set up the ToD sensors."""
|
||||||
if hass.config.time_zone is None:
|
if hass.config.time_zone is None:
|
||||||
_LOGGER.error("Timezone is not set in Home Assistant configuration")
|
_LOGGER.error("Timezone is not set in Home Assistant configuration") # type: ignore[unreachable]
|
||||||
return
|
return
|
||||||
|
|
||||||
after = config[CONF_AFTER]
|
after = config[CONF_AFTER]
|
||||||
@ -97,7 +99,7 @@ async def async_setup_platform(
|
|||||||
async_add_entities([sensor])
|
async_add_entities([sensor])
|
||||||
|
|
||||||
|
|
||||||
def _is_sun_event(sun_event):
|
def _is_sun_event(sun_event: time | SunEventType) -> TypeGuard[SunEventType]:
|
||||||
"""Return true if event is sun event not time."""
|
"""Return true if event is sun event not time."""
|
||||||
return sun_event in (SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET)
|
return sun_event in (SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET)
|
||||||
|
|
||||||
@ -172,8 +174,8 @@ class TodSensor(BinarySensorEntity):
|
|||||||
# Calculate the today's event utc time or
|
# Calculate the today's event utc time or
|
||||||
# if not available take next
|
# if not available take next
|
||||||
after_event_date = get_astral_event_date(
|
after_event_date = get_astral_event_date(
|
||||||
self.hass, str(self._after), nowutc
|
self.hass, self._after, nowutc
|
||||||
) or get_astral_event_next(self.hass, str(self._after), nowutc)
|
) or get_astral_event_next(self.hass, self._after, nowutc)
|
||||||
else:
|
else:
|
||||||
# Convert local time provided to UTC today
|
# Convert local time provided to UTC today
|
||||||
# datetime.combine(date, time, tzinfo) is not supported
|
# datetime.combine(date, time, tzinfo) is not supported
|
||||||
@ -188,13 +190,13 @@ class TodSensor(BinarySensorEntity):
|
|||||||
# Calculate the today's event utc time or if not available take
|
# Calculate the today's event utc time or if not available take
|
||||||
# next
|
# next
|
||||||
before_event_date = get_astral_event_date(
|
before_event_date = get_astral_event_date(
|
||||||
self.hass, str(self._before), nowutc
|
self.hass, self._before, nowutc
|
||||||
) or get_astral_event_next(self.hass, str(self._before), nowutc)
|
) or get_astral_event_next(self.hass, self._before, nowutc)
|
||||||
# Before is earlier than after
|
# Before is earlier than after
|
||||||
if before_event_date < after_event_date:
|
if before_event_date < after_event_date:
|
||||||
# Take next day for before
|
# Take next day for before
|
||||||
before_event_date = get_astral_event_next(
|
before_event_date = get_astral_event_next(
|
||||||
self.hass, str(self._before), after_event_date
|
self.hass, self._before, after_event_date
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# Convert local time provided to UTC today, see above
|
# Convert local time provided to UTC today, see above
|
||||||
@ -248,7 +250,7 @@ class TodSensor(BinarySensorEntity):
|
|||||||
assert self._time_before is not None
|
assert self._time_before is not None
|
||||||
if _is_sun_event(self._after):
|
if _is_sun_event(self._after):
|
||||||
self._time_after = get_astral_event_next(
|
self._time_after = get_astral_event_next(
|
||||||
self.hass, str(self._after), self._time_after - self._after_offset
|
self.hass, self._after, self._time_after - self._after_offset
|
||||||
)
|
)
|
||||||
self._time_after += self._after_offset
|
self._time_after += self._after_offset
|
||||||
else:
|
else:
|
||||||
@ -259,7 +261,7 @@ class TodSensor(BinarySensorEntity):
|
|||||||
|
|
||||||
if _is_sun_event(self._before):
|
if _is_sun_event(self._before):
|
||||||
self._time_before = get_astral_event_next(
|
self._time_before = get_astral_event_next(
|
||||||
self.hass, str(self._before), self._time_before - self._before_offset
|
self.hass, self._before, self._time_before - self._before_offset
|
||||||
)
|
)
|
||||||
self._time_before += self._before_offset
|
self._time_before += self._before_offset
|
||||||
else:
|
else:
|
||||||
@ -274,7 +276,7 @@ class TodSensor(BinarySensorEntity):
|
|||||||
self._calculate_next_update()
|
self._calculate_next_update()
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _clean_up_listener():
|
def _clean_up_listener() -> None:
|
||||||
if self._unsub_update is not None:
|
if self._unsub_update is not None:
|
||||||
self._unsub_update()
|
self._unsub_update()
|
||||||
self._unsub_update = None
|
self._unsub_update = None
|
||||||
|
10
mypy.ini
10
mypy.ini
@ -3732,6 +3732,16 @@ disallow_untyped_defs = true
|
|||||||
warn_return_any = true
|
warn_return_any = true
|
||||||
warn_unreachable = true
|
warn_unreachable = true
|
||||||
|
|
||||||
|
[mypy-homeassistant.components.tod.*]
|
||||||
|
check_untyped_defs = true
|
||||||
|
disallow_incomplete_defs = true
|
||||||
|
disallow_subclassing_any = true
|
||||||
|
disallow_untyped_calls = true
|
||||||
|
disallow_untyped_decorators = true
|
||||||
|
disallow_untyped_defs = true
|
||||||
|
warn_return_any = true
|
||||||
|
warn_unreachable = true
|
||||||
|
|
||||||
[mypy-homeassistant.components.todo.*]
|
[mypy-homeassistant.components.todo.*]
|
||||||
check_untyped_defs = true
|
check_untyped_defs = true
|
||||||
disallow_incomplete_defs = true
|
disallow_incomplete_defs = true
|
||||||
|
Loading…
x
Reference in New Issue
Block a user