Raise UpdateFailed when here_travel_time cannot find_location (#83157)

Fixes https://github.com/home-assistant/core/issues/83100
fixes undefined
pull/83482/head
Kevin Stillhammer 2022-12-03 19:06:10 +01:00 committed by Paulus Schoutsen
parent bb827a60ed
commit 75038d420c
3 changed files with 16 additions and 14 deletions

View File

@ -14,7 +14,7 @@ from homeassistant.const import ATTR_ATTRIBUTION, UnitOfLength
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.location import find_coordinates from homeassistant.helpers.location import find_coordinates
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from homeassistant.util import dt from homeassistant.util import dt
from homeassistant.util.unit_conversion import DistanceConverter from homeassistant.util.unit_conversion import DistanceConverter
@ -215,13 +215,15 @@ def prepare_parameters(
def _from_entity_id(entity_id: str) -> list[str]: def _from_entity_id(entity_id: str) -> list[str]:
coordinates = find_coordinates(hass, entity_id) coordinates = find_coordinates(hass, entity_id)
if coordinates is None: if coordinates is None:
raise InvalidCoordinatesException(f"No coordinates found for {entity_id}") raise UpdateFailed(f"No coordinates found for {entity_id}")
if coordinates is entity_id:
raise UpdateFailed(f"Could not find entity {entity_id}")
try: try:
formatted_coordinates = coordinates.split(",") formatted_coordinates = coordinates.split(",")
vol.Schema(cv.gps(formatted_coordinates)) vol.Schema(cv.gps(formatted_coordinates))
except (AttributeError, vol.ExactSequenceInvalid) as ex: except (AttributeError, vol.ExactSequenceInvalid) as ex:
raise InvalidCoordinatesException( raise UpdateFailed(
f"{coordinates} are not valid coordinates" f"{entity_id} does not have valid coordinates: {coordinates}"
) from ex ) from ex
return formatted_coordinates return formatted_coordinates
@ -275,7 +277,3 @@ def next_datetime(simple_time: time) -> datetime:
if combined < datetime.now(): if combined < datetime.now():
combined = combined + timedelta(days=1) combined = combined + timedelta(days=1)
return combined return combined
class InvalidCoordinatesException(Exception):
"""Coordinates for origin or destination are malformed."""

View File

@ -25,7 +25,7 @@ from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.device_registry import DeviceEntryType from homeassistant.helpers.device_registry import DeviceEntryType
from homeassistant.helpers.entity import DeviceInfo from homeassistant.helpers.entity import DeviceInfo
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.start import async_at_start from homeassistant.helpers.start import async_at_started
from homeassistant.helpers.update_coordinator import CoordinatorEntity from homeassistant.helpers.update_coordinator import CoordinatorEntity
from .const import ( from .const import (
@ -134,7 +134,7 @@ class HERETravelTimeSensor(CoordinatorEntity, RestoreSensor):
async def _update_at_start(_): async def _update_at_start(_):
await self.async_update() await self.async_update()
self.async_on_remove(async_at_start(self.hass, _update_at_start)) self.async_on_remove(async_at_started(self.hass, _update_at_start))
@callback @callback
def _handle_coordinator_update(self) -> None: def _handle_coordinator_update(self) -> None:

View File

@ -330,7 +330,7 @@ async def test_destination_entity_not_found(hass: HomeAssistant, caplog):
hass.bus.async_fire(EVENT_HOMEASSISTANT_START) hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
await hass.async_block_till_done() await hass.async_block_till_done()
assert "device_tracker.test are not valid coordinates" in caplog.text assert "Could not find entity device_tracker.test" in caplog.text
@pytest.mark.usefixtures("valid_response") @pytest.mark.usefixtures("valid_response")
@ -356,7 +356,7 @@ async def test_origin_entity_not_found(hass: HomeAssistant, caplog):
hass.bus.async_fire(EVENT_HOMEASSISTANT_START) hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
await hass.async_block_till_done() await hass.async_block_till_done()
assert "device_tracker.test are not valid coordinates" in caplog.text assert "Could not find entity device_tracker.test" in caplog.text
@pytest.mark.usefixtures("valid_response") @pytest.mark.usefixtures("valid_response")
@ -386,7 +386,9 @@ async def test_invalid_destination_entity_state(hass: HomeAssistant, caplog):
hass.bus.async_fire(EVENT_HOMEASSISTANT_START) hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
await hass.async_block_till_done() await hass.async_block_till_done()
assert "test_state are not valid coordinates" in caplog.text assert (
"device_tracker.test does not have valid coordinates: test_state" in caplog.text
)
@pytest.mark.usefixtures("valid_response") @pytest.mark.usefixtures("valid_response")
@ -416,7 +418,9 @@ async def test_invalid_origin_entity_state(hass: HomeAssistant, caplog):
hass.bus.async_fire(EVENT_HOMEASSISTANT_START) hass.bus.async_fire(EVENT_HOMEASSISTANT_START)
await hass.async_block_till_done() await hass.async_block_till_done()
assert "test_state are not valid coordinates" in caplog.text assert (
"device_tracker.test does not have valid coordinates: test_state" in caplog.text
)
async def test_route_not_found(hass: HomeAssistant, caplog): async def test_route_not_found(hass: HomeAssistant, caplog):