mirror of
https://github.com/python-kasa/python-kasa.git
synced 2026-10-14 08:34:15 +00:00
Raise UnsupportedDeviceError instead of crashing on unknown device types (#1781)
Use get() instead of index accessor to avoid crashing on unknown devices. --------- Co-authored-by: GhostCoder6969 <ghostcoder6969@gmail.com>
This commit is contained in:
@@ -142,7 +142,13 @@ def get_device_class_from_sys_info(sysinfo: dict[str, Any]) -> type[IotDevice]:
|
|||||||
# Disabled until properly implemented
|
# Disabled until properly implemented
|
||||||
# DeviceType.Camera: IotCamera,
|
# DeviceType.Camera: IotCamera,
|
||||||
}
|
}
|
||||||
return TYPE_TO_CLASS[IotDevice._get_device_type_from_sys_info(sysinfo)]
|
device_type = IotDevice._get_device_type_from_sys_info(sysinfo)
|
||||||
|
if (cls := TYPE_TO_CLASS.get(device_type)) is None:
|
||||||
|
raise UnsupportedDeviceError(
|
||||||
|
f"Unsupported device type: {device_type}",
|
||||||
|
discovery_result=sysinfo,
|
||||||
|
)
|
||||||
|
return cls
|
||||||
|
|
||||||
|
|
||||||
def get_device_class_from_family(
|
def get_device_class_from_family(
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ from kasa import (
|
|||||||
KasaException,
|
KasaException,
|
||||||
SmartCamProtocol,
|
SmartCamProtocol,
|
||||||
SmartProtocol,
|
SmartProtocol,
|
||||||
|
UnsupportedDeviceError,
|
||||||
)
|
)
|
||||||
from kasa.device_factory import (
|
from kasa.device_factory import (
|
||||||
Device,
|
Device,
|
||||||
@@ -31,6 +32,7 @@ from kasa.device_factory import (
|
|||||||
SmartDevice,
|
SmartDevice,
|
||||||
connect,
|
connect,
|
||||||
get_device_class_from_family,
|
get_device_class_from_family,
|
||||||
|
get_device_class_from_sys_info,
|
||||||
get_protocol,
|
get_protocol,
|
||||||
)
|
)
|
||||||
from kasa.deviceconfig import (
|
from kasa.deviceconfig import (
|
||||||
@@ -212,6 +214,26 @@ async def test_device_types(dev: Device) -> None:
|
|||||||
assert dev.device_type == res
|
assert dev.device_type == res
|
||||||
|
|
||||||
|
|
||||||
|
def test_device_class_from_unsupported_legacy_camera() -> None:
|
||||||
|
"""IOT.IPCAMERA sysinfo raises UnsupportedDeviceError instead of KeyError."""
|
||||||
|
info = {
|
||||||
|
"system": {
|
||||||
|
"get_sysinfo": {
|
||||||
|
"system": {
|
||||||
|
"type": "IOT.IPCAMERA",
|
||||||
|
"model": "EC60(US)",
|
||||||
|
"alias": "Kasa Cam",
|
||||||
|
"dev_name": "Kasa Spot",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
with pytest.raises(UnsupportedDeviceError, match="Unsupported device type"):
|
||||||
|
get_device_class_from_sys_info(info)
|
||||||
|
with pytest.raises(UnsupportedDeviceError, match="Unsupported device type"):
|
||||||
|
Discover._get_device_class(info)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.xdist_group(name="caplog")
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_device_class_from_unknown_family(
|
async def test_device_class_from_unknown_family(
|
||||||
caplog: pytest.LogCaptureFixture,
|
caplog: pytest.LogCaptureFixture,
|
||||||
|
|||||||
Reference in New Issue
Block a user