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
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

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:
try:
parsed_map = parser.parse(map_bytes) 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",