From 8eb3e63d9d3326cedc11273ce5ed746ea5c1780a Mon Sep 17 00:00:00 2001 From: Aidan Timson Date: Mon, 15 Dec 2025 11:47:34 +0000 Subject: [PATCH] Update systembridgeconnector to 5.2.4, fix media source (#158917) --- .../components/system_bridge/__init__.py | 10 ++--- .../components/system_bridge/config_flow.py | 2 +- .../components/system_bridge/const.py | 2 +- .../components/system_bridge/coordinator.py | 4 +- .../components/system_bridge/data.py | 2 +- .../components/system_bridge/manifest.json | 2 +- .../components/system_bridge/media_player.py | 2 +- .../components/system_bridge/media_source.py | 24 +++++------ .../components/system_bridge/notify.py | 2 +- .../components/system_bridge/sensor.py | 6 +-- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/system_bridge/__init__.py | 20 ++++----- tests/components/system_bridge/conftest.py | 41 ++++++++++++------- 14 files changed, 66 insertions(+), 55 deletions(-) diff --git a/homeassistant/components/system_bridge/__init__.py b/homeassistant/components/system_bridge/__init__.py index 574c5399ff8..c057ae0c214 100644 --- a/homeassistant/components/system_bridge/__init__.py +++ b/homeassistant/components/system_bridge/__init__.py @@ -13,12 +13,12 @@ from systembridgeconnector.exceptions import ( ConnectionErrorException, DataMissingException, ) +from systembridgeconnector.models.keyboard_key import KeyboardKey +from systembridgeconnector.models.keyboard_text import KeyboardText +from systembridgeconnector.models.modules.processes import Process +from systembridgeconnector.models.open_path import OpenPath +from systembridgeconnector.models.open_url import OpenUrl from systembridgeconnector.version import Version -from systembridgemodels.keyboard_key import KeyboardKey -from systembridgemodels.keyboard_text import KeyboardText -from systembridgemodels.modules.processes import Process -from systembridgemodels.open_path import OpenPath -from systembridgemodels.open_url import OpenUrl import voluptuous as vol from homeassistant.config_entries import ConfigEntry diff --git a/homeassistant/components/system_bridge/config_flow.py b/homeassistant/components/system_bridge/config_flow.py index bf6057a27bb..6bf001c9603 100644 --- a/homeassistant/components/system_bridge/config_flow.py +++ b/homeassistant/components/system_bridge/config_flow.py @@ -12,8 +12,8 @@ from systembridgeconnector.exceptions import ( ConnectionClosedException, ConnectionErrorException, ) +from systembridgeconnector.models.modules import GetData, Module from systembridgeconnector.websocket_client import WebSocketClient -from systembridgemodels.modules import GetData, Module import voluptuous as vol from homeassistant.config_entries import SOURCE_REAUTH, ConfigFlow, ConfigFlowResult diff --git a/homeassistant/components/system_bridge/const.py b/homeassistant/components/system_bridge/const.py index 235d7e6b986..ae25f80f455 100644 --- a/homeassistant/components/system_bridge/const.py +++ b/homeassistant/components/system_bridge/const.py @@ -2,7 +2,7 @@ from typing import Final -from systembridgemodels.modules import Module +from systembridgeconnector.models.modules import Module DOMAIN = "system_bridge" diff --git a/homeassistant/components/system_bridge/coordinator.py b/homeassistant/components/system_bridge/coordinator.py index f665c88121c..6fca2e5902f 100644 --- a/homeassistant/components/system_bridge/coordinator.py +++ b/homeassistant/components/system_bridge/coordinator.py @@ -13,13 +13,13 @@ from systembridgeconnector.exceptions import ( ConnectionClosedException, ConnectionErrorException, ) -from systembridgeconnector.websocket_client import WebSocketClient -from systembridgemodels.modules import ( +from systembridgeconnector.models.modules import ( GetData, Module, ModulesData, RegisterDataListener, ) +from systembridgeconnector.websocket_client import WebSocketClient from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( diff --git a/homeassistant/components/system_bridge/data.py b/homeassistant/components/system_bridge/data.py index f07e8d75f28..983b16a20d4 100644 --- a/homeassistant/components/system_bridge/data.py +++ b/homeassistant/components/system_bridge/data.py @@ -2,7 +2,7 @@ from dataclasses import dataclass, field -from systembridgemodels.modules import ( +from systembridgeconnector.models.modules import ( CPU, GPU, Battery, diff --git a/homeassistant/components/system_bridge/manifest.json b/homeassistant/components/system_bridge/manifest.json index d2d9bb6e657..cefd5c3520f 100644 --- a/homeassistant/components/system_bridge/manifest.json +++ b/homeassistant/components/system_bridge/manifest.json @@ -9,6 +9,6 @@ "integration_type": "device", "iot_class": "local_push", "loggers": ["systembridgeconnector"], - "requirements": ["systembridgeconnector==5.1.0"], + "requirements": ["systembridgeconnector==5.2.4"], "zeroconf": ["_system-bridge._tcp.local."] } diff --git a/homeassistant/components/system_bridge/media_player.py b/homeassistant/components/system_bridge/media_player.py index 2be2f06c1e7..c7b1fab679a 100644 --- a/homeassistant/components/system_bridge/media_player.py +++ b/homeassistant/components/system_bridge/media_player.py @@ -5,7 +5,7 @@ from __future__ import annotations import datetime as dt from typing import Final -from systembridgemodels.media_control import MediaAction, MediaControl +from systembridgeconnector.models.media_control import MediaAction, MediaControl from homeassistant.components.media_player import ( MediaPlayerDeviceClass, diff --git a/homeassistant/components/system_bridge/media_source.py b/homeassistant/components/system_bridge/media_source.py index 53bc4f32506..930557568b8 100644 --- a/homeassistant/components/system_bridge/media_source.py +++ b/homeassistant/components/system_bridge/media_source.py @@ -2,9 +2,9 @@ from __future__ import annotations -from systembridgemodels.media_directories import MediaDirectory -from systembridgemodels.media_files import MediaFile, MediaFiles -from systembridgemodels.media_get_files import MediaGetFiles +from systembridgeconnector.models.media_directories import MediaDirectory +from systembridgeconnector.models.media_files import MediaFile, MediaFiles +from systembridgeconnector.models.media_get_files import MediaGetFiles from homeassistant.components.media_player import MediaClass from homeassistant.components.media_source import ( @@ -183,9 +183,9 @@ def _build_media_items( for file in media_files.files if file.is_directory or ( - file.is_file - and file.mime_type is not None - and file.mime_type.startswith(MEDIA_MIME_TYPES) + not file.is_directory + and file.content_type is not None + and file.content_type.startswith(MEDIA_MIME_TYPES) ) ], ) @@ -197,20 +197,20 @@ def _build_media_item( ) -> BrowseMediaSource: """Build individual media item.""" ext = "" - if media_file.is_file and media_file.mime_type is not None: - ext = f"~~{media_file.mime_type}" + if not media_file.is_directory and media_file.content_type is not None: + ext = f"~~{media_file.content_type}" - if media_file.is_directory or media_file.mime_type is None: + if media_file.is_directory or media_file.content_type is None: media_class = MediaClass.DIRECTORY else: - media_class = MEDIA_CLASS_MAP[media_file.mime_type.split("/", 1)[0]] + media_class = MEDIA_CLASS_MAP[media_file.content_type.split("/", 1)[0]] return BrowseMediaSource( domain=DOMAIN, identifier=f"{path}/{media_file.name}{ext}", media_class=media_class, - media_content_type=media_file.mime_type, + media_content_type=media_file.content_type, title=media_file.name, - can_play=media_file.is_file, + can_play=not media_file.is_directory, can_expand=media_file.is_directory, ) diff --git a/homeassistant/components/system_bridge/notify.py b/homeassistant/components/system_bridge/notify.py index 0e2f058cc7c..2b13fef071e 100644 --- a/homeassistant/components/system_bridge/notify.py +++ b/homeassistant/components/system_bridge/notify.py @@ -5,7 +5,7 @@ from __future__ import annotations import logging from typing import Any -from systembridgemodels.notification import Notification +from systembridgeconnector.models.notification import Notification from homeassistant.components.notify import ( ATTR_DATA, diff --git a/homeassistant/components/system_bridge/sensor.py b/homeassistant/components/system_bridge/sensor.py index f07c96fe8ca..7a7f2c555df 100644 --- a/homeassistant/components/system_bridge/sensor.py +++ b/homeassistant/components/system_bridge/sensor.py @@ -7,9 +7,9 @@ from dataclasses import dataclass from datetime import UTC, datetime, timedelta from typing import Final, cast -from systembridgemodels.modules.cpu import PerCPU -from systembridgemodels.modules.displays import Display -from systembridgemodels.modules.gpus import GPU +from systembridgeconnector.models.modules.cpu import PerCPU +from systembridgeconnector.models.modules.displays import Display +from systembridgeconnector.models.modules.gpus import GPU from homeassistant.components.sensor import ( SensorDeviceClass, diff --git a/requirements_all.txt b/requirements_all.txt index 0ec0db80650..7eef0f00f66 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2949,7 +2949,7 @@ switchbot-api==2.8.0 synology-srm==0.2.0 # homeassistant.components.system_bridge -systembridgeconnector==5.1.0 +systembridgeconnector==5.2.4 # homeassistant.components.tailscale tailscale==0.6.2 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index dc730925491..183c7b04eae 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -2461,7 +2461,7 @@ surepy==0.9.0 switchbot-api==2.8.0 # homeassistant.components.system_bridge -systembridgeconnector==5.1.0 +systembridgeconnector==5.2.4 # homeassistant.components.tailscale tailscale==0.6.2 diff --git a/tests/components/system_bridge/__init__.py b/tests/components/system_bridge/__init__.py index 89bd1b652ba..129fd314f84 100644 --- a/tests/components/system_bridge/__init__.py +++ b/tests/components/system_bridge/__init__.py @@ -4,16 +4,16 @@ from collections.abc import Awaitable, Callable from ipaddress import ip_address from typing import Any -from systembridgemodels.fixtures.modules.battery import FIXTURE_BATTERY -from systembridgemodels.fixtures.modules.cpu import FIXTURE_CPU -from systembridgemodels.fixtures.modules.disks import FIXTURE_DISKS -from systembridgemodels.fixtures.modules.displays import FIXTURE_DISPLAYS -from systembridgemodels.fixtures.modules.gpus import FIXTURE_GPUS -from systembridgemodels.fixtures.modules.media import FIXTURE_MEDIA -from systembridgemodels.fixtures.modules.memory import FIXTURE_MEMORY -from systembridgemodels.fixtures.modules.processes import FIXTURE_PROCESSES -from systembridgemodels.fixtures.modules.system import FIXTURE_SYSTEM -from systembridgemodels.modules import Module, ModulesData +from systembridgeconnector.models.fixtures.modules.battery import FIXTURE_BATTERY +from systembridgeconnector.models.fixtures.modules.cpu import FIXTURE_CPU +from systembridgeconnector.models.fixtures.modules.disks import FIXTURE_DISKS +from systembridgeconnector.models.fixtures.modules.displays import FIXTURE_DISPLAYS +from systembridgeconnector.models.fixtures.modules.gpus import FIXTURE_GPUS +from systembridgeconnector.models.fixtures.modules.media import FIXTURE_MEDIA +from systembridgeconnector.models.fixtures.modules.memory import FIXTURE_MEMORY +from systembridgeconnector.models.fixtures.modules.processes import FIXTURE_PROCESSES +from systembridgeconnector.models.fixtures.modules.system import FIXTURE_SYSTEM +from systembridgeconnector.models.modules import Module, ModulesData from homeassistant.const import CONF_HOST, CONF_PORT, CONF_TOKEN from homeassistant.core import HomeAssistant diff --git a/tests/components/system_bridge/conftest.py b/tests/components/system_bridge/conftest.py index 2f1f87485e7..67bafe67bad 100644 --- a/tests/components/system_bridge/conftest.py +++ b/tests/components/system_bridge/conftest.py @@ -8,21 +8,25 @@ from unittest.mock import AsyncMock, MagicMock, patch import pytest from systembridgeconnector.const import EventKey, EventType -from systembridgemodels.fixtures.modules.battery import FIXTURE_BATTERY -from systembridgemodels.fixtures.modules.cpu import FIXTURE_CPU -from systembridgemodels.fixtures.modules.disks import FIXTURE_DISKS -from systembridgemodels.fixtures.modules.displays import FIXTURE_DISPLAYS -from systembridgemodels.fixtures.modules.gpus import FIXTURE_GPUS -from systembridgemodels.fixtures.modules.media import FIXTURE_MEDIA -from systembridgemodels.fixtures.modules.memory import FIXTURE_MEMORY -from systembridgemodels.fixtures.modules.networks import FIXTURE_NETWORKS -from systembridgemodels.fixtures.modules.processes import FIXTURE_PROCESSES -from systembridgemodels.fixtures.modules.sensors import FIXTURE_SENSORS -from systembridgemodels.fixtures.modules.system import FIXTURE_SYSTEM -from systembridgemodels.media_directories import MediaDirectory -from systembridgemodels.media_files import MediaFile, MediaFiles -from systembridgemodels.modules import Module, ModulesData, RegisterDataListener -from systembridgemodels.response import Response +from systembridgeconnector.models.fixtures.modules.battery import FIXTURE_BATTERY +from systembridgeconnector.models.fixtures.modules.cpu import FIXTURE_CPU +from systembridgeconnector.models.fixtures.modules.disks import FIXTURE_DISKS +from systembridgeconnector.models.fixtures.modules.displays import FIXTURE_DISPLAYS +from systembridgeconnector.models.fixtures.modules.gpus import FIXTURE_GPUS +from systembridgeconnector.models.fixtures.modules.media import FIXTURE_MEDIA +from systembridgeconnector.models.fixtures.modules.memory import FIXTURE_MEMORY +from systembridgeconnector.models.fixtures.modules.networks import FIXTURE_NETWORKS +from systembridgeconnector.models.fixtures.modules.processes import FIXTURE_PROCESSES +from systembridgeconnector.models.fixtures.modules.sensors import FIXTURE_SENSORS +from systembridgeconnector.models.fixtures.modules.system import FIXTURE_SYSTEM +from systembridgeconnector.models.media_directories import MediaDirectory +from systembridgeconnector.models.media_files import MediaFile, MediaFiles +from systembridgeconnector.models.modules import ( + Module, + ModulesData, + RegisterDataListener, +) +from systembridgeconnector.models.response import Response from homeassistant.components.system_bridge.config_flow import SystemBridgeConfigFlow from homeassistant.components.system_bridge.const import DOMAIN @@ -130,6 +134,7 @@ def mock_websocket_client( websocket_client.get_directories.return_value = [ MediaDirectory( key="documents", + name="Documents", path="/home/user/documents", ) ] @@ -143,6 +148,8 @@ def mock_websocket_client( last_accessed=1630000000, created=1630000000, modified=1630000000, + mod_time=1630000000, + permissions="rwxr-xr-x", is_directory=True, is_file=False, is_link=False, @@ -155,6 +162,8 @@ def mock_websocket_client( last_accessed=1630000000, created=1630000000, modified=1630000000, + mod_time=1630000000, + permissions="rw-r--r--", is_directory=False, is_file=True, is_link=False, @@ -168,6 +177,8 @@ def mock_websocket_client( last_accessed=1630000000, created=1630000000, modified=1630000000, + mod_time=1630000000, + permissions="rw-r--r--", is_directory=False, is_file=True, is_link=False,