type hints: Introduce settings protocol

Related #2273
This commit is contained in:
MattHag 2024-11-03 21:14:16 +01:00 committed by Peter F. Patel-Schneider
parent 3636ed78bb
commit dfb4ccc93f
2 changed files with 92 additions and 2 deletions

View File

@ -24,6 +24,7 @@ import traceback
from time import time from time import time
from typing import Any from typing import Any
from typing import Callable from typing import Callable
from typing import Protocol
from solaar.i18n import _ from solaar.i18n import _
@ -1805,7 +1806,95 @@ SETTINGS: list[settings.Setting] = [
] ]
def check_feature(device, settings_class: settings.Setting) -> None | bool | Any: class SettingsProtocol(Protocol):
@property
def name(self):
...
@property
def label(self):
...
@property
def description(self):
...
@property
def feature(self):
...
@property
def register(self):
...
@property
def kind(self):
...
@property
def min_version(self):
...
@property
def persist(self):
...
@property
def rw_options(self):
...
@property
def validator_class(self):
...
@property
def validator_options(self):
...
@classmethod
def build(cls, device):
...
def val_to_string(self, value):
...
@property
def choices(self):
...
@property
def range(self):
...
def _pre_read(self, cached, key=None):
...
def read(self, cached=True):
...
def _pre_write(self, save=True):
...
def update(self, value, save=True):
...
def write(self, value, save=True):
...
def acceptable(self, args, current):
...
def compare(self, args, current):
...
def apply(self):
...
def __str__(self):
...
def check_feature(device, settings_class: SettingsProtocol) -> None | bool | Any:
if settings_class.feature not in device.features: if settings_class.feature not in device.features:
return return
if settings_class.min_version > device.features.get_feature_version(settings_class.feature): if settings_class.min_version > device.features.get_feature_version(settings_class.feature):

View File

@ -19,6 +19,7 @@ import yaml
from logitech_receiver import settings from logitech_receiver import settings
from logitech_receiver import settings_templates from logitech_receiver import settings_templates
from logitech_receiver.common import NamedInts from logitech_receiver.common import NamedInts
from logitech_receiver.settings_templates import SettingsProtocol
from solaar import configuration from solaar import configuration
@ -215,7 +216,7 @@ def run(receivers, args, _find_receiver, find_device):
dev.persister[setting.name] = setting._value dev.persister[setting.name] = setting._value
def set(dev, setting: settings.Setting, args, save): def set(dev, setting: SettingsProtocol, args, save):
if setting.kind == settings.Kind.TOGGLE: if setting.kind == settings.Kind.TOGGLE:
value = select_toggle(args.value_key, setting) value = select_toggle(args.value_key, setting)
args.value_key = value args.value_key = value