Improve failure handling and logging for invalid map responses (#139681)

This commit is contained in:
Allen Porter
2025-03-03 11:23:29 -08:00
committed by GitHub
parent 890c672f8c
commit 9dc04cb088

View File

@@ -4,6 +4,7 @@ import asyncio
from collections.abc import Callable from collections.abc import Callable
from datetime import datetime from datetime import datetime
import io import io
import logging
from roborock import RoborockCommand from roborock import RoborockCommand
from vacuum_map_parser_base.config.color import ColorsPalette from vacuum_map_parser_base.config.color import ColorsPalette
@@ -30,6 +31,8 @@ from .const import (
from .coordinator import RoborockConfigEntry, RoborockDataUpdateCoordinator from .coordinator import RoborockConfigEntry, RoborockDataUpdateCoordinator
from .entity import RoborockCoordinatedEntityV1 from .entity import RoborockCoordinatedEntityV1
_LOGGER = logging.getLogger(__name__)
async def async_setup_entry( async def async_setup_entry(
hass: HomeAssistant, hass: HomeAssistant,
@@ -48,7 +51,11 @@ async def async_setup_entry(
) )
def parse_image(map_bytes: bytes) -> bytes | None: def parse_image(map_bytes: bytes) -> bytes | None:
parsed_map = parser.parse(map_bytes) try:
parsed_map = parser.parse(map_bytes)
except (IndexError, ValueError) as err:
_LOGGER.debug("Exception when parsing map contents: %s", err)
return None
if parsed_map.image is None: if parsed_map.image is None:
return None return None
img_byte_arr = io.BytesIO() img_byte_arr = io.BytesIO()
@@ -150,6 +157,7 @@ class RoborockMap(RoborockCoordinatedEntityV1, ImageEntity):
not isinstance(response[0], bytes) not isinstance(response[0], bytes)
or (content := self.parser(response[0])) is None or (content := self.parser(response[0])) is None
): ):
_LOGGER.debug("Failed to parse map contents: %s", response[0])
raise HomeAssistantError( raise HomeAssistantError(
translation_domain=DOMAIN, translation_domain=DOMAIN,
translation_key="map_failure", translation_key="map_failure",