From 46e0e92b93d44c1b525da57689401071435128e0 Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Wed, 9 Nov 2022 21:17:17 +0100 Subject: [PATCH] Implement choices_attribute --- miio/device.py | 13 ++++++++++++- miio/devicestatus.py | 4 ---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/miio/device.py b/miio/device.py index 433cd4d12..098502656 100644 --- a/miio/device.py +++ b/miio/device.py @@ -5,7 +5,12 @@ import click from .click_common import DeviceGroupMeta, LiteralParamType, command, format_output -from .descriptors import ActionDescriptor, SensorDescriptor, SettingDescriptor +from .descriptors import ( + ActionDescriptor, + EnumSettingDescriptor, + SensorDescriptor, + SettingDescriptor, +) from .deviceinfo import DeviceInfo from .devicestatus import DeviceStatus from .exceptions import DeviceInfoUnavailableException, PayloadDecodeException @@ -258,6 +263,12 @@ def settings(self) -> Dict[str, SettingDescriptor]: ) setting.setter = getattr(self, setting.setter_name) + if ( + isinstance(setting, EnumSettingDescriptor) + and setting.choices_attribute is not None + ): + retrieve_choices_function = getattr(self, setting.choices_attribute) + setting.choices = retrieve_choices_function() # This can do IO return settings diff --git a/miio/devicestatus.py b/miio/devicestatus.py index d3fe0242f..66f605f4d 100644 --- a/miio/devicestatus.py +++ b/miio/devicestatus.py @@ -219,10 +219,6 @@ def decorator_setting(func): step=step or 1, ) elif choices or choices_attribute: - if choices_attribute is not None: - # TODO: adding choices from attribute is a bit more complex, as it requires a way to - # construct enums pointed by the attribute - raise NotImplementedError("choices_attribute is not yet implemented") descriptor = EnumSettingDescriptor( **common_values, choices=choices,