from typing import TypeVar from models.devices import GenericDevice, LightDevice, SwitchDevice from models.exceptions import NoDeviceFoundError from models.groups import DeviceGroup, Room DEVICE_TYPE = TypeVar( "DEVICE_TYPE", type(GenericDevice), type(SwitchDevice), type(LightDevice), type(Room), type(DeviceGroup), ) def filter_devices( devices: list[GenericDevice], type: DEVICE_TYPE ) -> list[DEVICE_TYPE]: """Filters out devices that are not of a specific type.""" filtered_devices: list[DEVICE_TYPE] = [ device for device in devices if isinstance(device, type) ] if len(filtered_devices) == 0: raise NoDeviceFoundError(f"No devices of type {type} found.") return filtered_devices