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 typing import Any
from typing import Callable
from typing import Protocol
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:
return
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_templates
from logitech_receiver.common import NamedInts
from logitech_receiver.settings_templates import SettingsProtocol
from solaar import configuration
@ -215,7 +216,7 @@ def run(receivers, args, _find_receiver, find_device):
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:
value = select_toggle(args.value_key, setting)
args.value_key = value