From 542bf64e24b2c33975820a722e3a389726fb624f Mon Sep 17 00:00:00 2001 From: kernelpanic85 <80057019+kernelpanic85@users.noreply.github.com> Date: Fri, 25 Sep 2026 15:43:40 -0400 Subject: [PATCH] Bump arcam_fmj to 3.0.0 (#182956) --- .../components/arcam_fmj/__init__.py | 8 +++++-- .../components/arcam_fmj/config_flow.py | 2 +- .../components/arcam_fmj/coordinator.py | 2 +- homeassistant/components/arcam_fmj/entity.py | 2 +- .../components/arcam_fmj/manifest.json | 2 +- .../components/arcam_fmj/media_player.py | 4 ++-- homeassistant/components/arcam_fmj/sensor.py | 3 ++- requirements_all.txt | 2 +- .../components/arcam_fmj/test_config_flow.py | 2 +- .../components/arcam_fmj/test_media_player.py | 23 ++++++++++++++++++- tests/components/arcam_fmj/test_sensor.py | 2 +- 11 files changed, 39 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/arcam_fmj/__init__.py b/homeassistant/components/arcam_fmj/__init__.py index 90d58791a57a..c2be2d1b29cc 100644 --- a/homeassistant/components/arcam_fmj/__init__.py +++ b/homeassistant/components/arcam_fmj/__init__.py @@ -5,8 +5,8 @@ from asyncio import timeout from contextlib import AsyncExitStack import logging -from arcam.fmj import ConnectionFailed from arcam.fmj.client import Client +from arcam.fmj.errors import ConnectionFailed from homeassistant.const import CONF_HOST, CONF_PORT, Platform from homeassistant.core import HomeAssistant @@ -18,7 +18,11 @@ from .coordinator import ArcamFmjConfigEntry, ArcamFmjCoordinator, ArcamFmjRunti _LOGGER = logging.getLogger(__name__) -PLATFORMS = [Platform.BINARY_SENSOR, Platform.MEDIA_PLAYER, Platform.SENSOR] +PLATFORMS = [ + Platform.BINARY_SENSOR, + Platform.MEDIA_PLAYER, + Platform.SENSOR, +] async def async_setup_entry(hass: HomeAssistant, entry: ArcamFmjConfigEntry) -> bool: diff --git a/homeassistant/components/arcam_fmj/config_flow.py b/homeassistant/components/arcam_fmj/config_flow.py index 9cb467e13310..4081ef1da849 100644 --- a/homeassistant/components/arcam_fmj/config_flow.py +++ b/homeassistant/components/arcam_fmj/config_flow.py @@ -4,8 +4,8 @@ import socket from typing import Any, override from urllib.parse import urlparse -from arcam.fmj import ConnectionFailed from arcam.fmj.client import Client +from arcam.fmj.errors import ConnectionFailed from arcam.fmj.utils import get_uniqueid_from_host, get_uniqueid_from_udn import probatio diff --git a/homeassistant/components/arcam_fmj/coordinator.py b/homeassistant/components/arcam_fmj/coordinator.py index 65a6457def4b..df6b5271af09 100644 --- a/homeassistant/components/arcam_fmj/coordinator.py +++ b/homeassistant/components/arcam_fmj/coordinator.py @@ -6,8 +6,8 @@ from dataclasses import dataclass import logging from typing import override -from arcam.fmj import ConnectionFailed from arcam.fmj.client import AmxDuetResponse, Client, ResponsePacket +from arcam.fmj.errors import ConnectionFailed from arcam.fmj.state import State from homeassistant.config_entries import ConfigEntry diff --git a/homeassistant/components/arcam_fmj/entity.py b/homeassistant/components/arcam_fmj/entity.py index e1ba40b31448..c5a153fb23c8 100644 --- a/homeassistant/components/arcam_fmj/entity.py +++ b/homeassistant/components/arcam_fmj/entity.py @@ -4,7 +4,7 @@ from collections.abc import Callable, Coroutine import functools from typing import Any, override -from arcam.fmj import ConnectionFailed +from arcam.fmj.errors import ConnectionFailed from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity import EntityDescription diff --git a/homeassistant/components/arcam_fmj/manifest.json b/homeassistant/components/arcam_fmj/manifest.json index 084d26e19ae5..05afce105545 100644 --- a/homeassistant/components/arcam_fmj/manifest.json +++ b/homeassistant/components/arcam_fmj/manifest.json @@ -7,7 +7,7 @@ "integration_type": "device", "iot_class": "local_polling", "loggers": ["arcam"], - "requirements": ["arcam-fmj==1.8.3"], + "requirements": ["arcam-fmj==3.0.0"], "ssdp": [ { "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1", diff --git a/homeassistant/components/arcam_fmj/media_player.py b/homeassistant/components/arcam_fmj/media_player.py index 8c05e9de01ab..0e84394993f1 100644 --- a/homeassistant/components/arcam_fmj/media_player.py +++ b/homeassistant/components/arcam_fmj/media_player.py @@ -3,7 +3,7 @@ import logging from typing import Any, override -from arcam.fmj import SourceCodes +from arcam.fmj.codecs import SourceCodes from homeassistant.components.media_player import ( BrowseError, @@ -165,7 +165,7 @@ class ArcamFmj(ArcamFmjEntity, MediaPlayerEntity): f"Media not found: {media_content_type} / {media_content_id}" ) - presets = self._state.get_preset_details() + presets = self._state.get_preset_details() or {} radio = [ BrowseMedia( diff --git a/homeassistant/components/arcam_fmj/sensor.py b/homeassistant/components/arcam_fmj/sensor.py index 467f5c16e888..e8863c27ee3b 100644 --- a/homeassistant/components/arcam_fmj/sensor.py +++ b/homeassistant/components/arcam_fmj/sensor.py @@ -5,7 +5,8 @@ from dataclasses import dataclass import logging from typing import override -from arcam.fmj import IncomingVideoAspectRatio, IncomingVideoColorspace, IntOrTypeEnum +from arcam.fmj.codecs import IncomingVideoAspectRatio, IncomingVideoColorspace +from arcam.fmj.models import IntOrTypeEnum from arcam.fmj.state import IncomingAudioConfig, IncomingAudioFormat, State from homeassistant.components.sensor import ( diff --git a/requirements_all.txt b/requirements_all.txt index 154d23e0dd45..a67161abd453 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -573,7 +573,7 @@ aqualogic==2.6 aranet4==2.6.0 # homeassistant.components.arcam_fmj -arcam-fmj==1.8.3 +arcam-fmj==3.0.0 # homeassistant.components.arris_tg2492lg arris-tg2492lg==2.2.0 diff --git a/tests/components/arcam_fmj/test_config_flow.py b/tests/components/arcam_fmj/test_config_flow.py index 7c0f9bf25324..a15e8f44f543 100644 --- a/tests/components/arcam_fmj/test_config_flow.py +++ b/tests/components/arcam_fmj/test_config_flow.py @@ -5,7 +5,7 @@ from dataclasses import replace import socket from unittest.mock import AsyncMock, MagicMock, patch -from arcam.fmj.client import ConnectionFailed +from arcam.fmj.errors import ConnectionFailed import pytest from homeassistant.components.arcam_fmj.const import DOMAIN diff --git a/tests/components/arcam_fmj/test_media_player.py b/tests/components/arcam_fmj/test_media_player.py index 6d00b2b1b5fd..34c472331c4b 100644 --- a/tests/components/arcam_fmj/test_media_player.py +++ b/tests/components/arcam_fmj/test_media_player.py @@ -4,7 +4,8 @@ from collections.abc import Generator from math import isclose from unittest.mock import Mock, PropertyMock, patch -from arcam.fmj import ConnectionFailed, DecodeMode2CH, DecodeModeMCH, SourceCodes +from arcam.fmj.codecs import DecodeMode2CH, DecodeModeMCH, SourceCodes +from arcam.fmj.errors import ConnectionFailed from arcam.fmj.state import State import pytest from syrupy.assertion import SnapshotAssertion @@ -22,6 +23,7 @@ from homeassistant.components.media_player import ( ATTR_MEDIA_VOLUME_MUTED, ATTR_SOUND_MODE, DOMAIN as MEDIA_PLAYER_DOMAIN, + SERVICE_BROWSE_MEDIA, SERVICE_PLAY_MEDIA, SERVICE_SELECT_SOUND_MODE, SERVICE_SELECT_SOURCE, @@ -64,6 +66,25 @@ async def test_setup( await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id) +@pytest.mark.usefixtures("player_setup") +async def test_browse_media_without_presets( + hass: HomeAssistant, state_1: State +) -> None: + """Test browsing when the receiver has no preset details.""" + state_1.get_preset_details.return_value = None + response = await hass.services.async_call( + MEDIA_PLAYER_DOMAIN, + SERVICE_BROWSE_MEDIA, + service_data={ATTR_ENTITY_ID: MOCK_ENTITY_ID}, + blocking=True, + return_response=True, + ) + media = response[MOCK_ENTITY_ID] + + assert media.media_content_id == "root" + assert media.children == [] + + @pytest.mark.usefixtures("player_setup") async def test_disconnect(hass: HomeAssistant, client: Mock) -> None: """Test a disconnection is detected.""" diff --git a/tests/components/arcam_fmj/test_sensor.py b/tests/components/arcam_fmj/test_sensor.py index d214759cc52e..5a7922544bca 100644 --- a/tests/components/arcam_fmj/test_sensor.py +++ b/tests/components/arcam_fmj/test_sensor.py @@ -3,7 +3,7 @@ from collections.abc import Generator from unittest.mock import Mock, patch -from arcam.fmj import IncomingVideoAspectRatio, IncomingVideoColorspace +from arcam.fmj.codecs import IncomingVideoAspectRatio, IncomingVideoColorspace from arcam.fmj.state import IncomingAudioConfig, IncomingAudioFormat, State import pytest from syrupy.assertion import SnapshotAssertion