diff --git a/lib/hidapi/hidapi_impl.py b/lib/hidapi/hidapi_impl.py index 9e04153a..09bb3ab1 100644 --- a/lib/hidapi/hidapi_impl.py +++ b/lib/hidapi/hidapi_impl.py @@ -228,7 +228,7 @@ class _DeviceMonitor(Thread): def _match( action: str, - device, + device: dict[str, Any], filter_func: Callable[[int, int, int, bool, bool], dict[str, Any]], ): """ @@ -393,7 +393,7 @@ def open(vendor_id, product_id, serial=None): return device_handle -def open_path(device_path) -> Any: +def open_path(device_path: str) -> int: """Open a HID device by its path name. :param device_path: the path of a ``DeviceInfo`` tuple returned by enumerate(). diff --git a/lib/logitech_receiver/base.py b/lib/logitech_receiver/base.py index cc8b3221..de70a713 100644 --- a/lib/logitech_receiver/base.py +++ b/lib/logitech_receiver/base.py @@ -66,7 +66,7 @@ class HIDAPI(typing.Protocol): def open(self, vendor_id, product_id, serial=None): ... - def open_path(self, path): + def open_path(self, path) -> int: ... def enumerate(self, filter_func: Callable[[int, int, int, bool, bool], dict[str, typing.Any]]) -> DeviceInfo: @@ -233,7 +233,7 @@ def notify_on_receivers_glib(glib: GLib, callback: Callable): return hidapi.monitor_glib(glib, callback, _filter_products_of_interest) -def open_path(path): +def open_path(path) -> int: """Checks if the given Linux device path points to the right UR device. :param path: the Linux device path. @@ -356,7 +356,7 @@ def _is_relevant_message(data: bytes) -> bool: return False -def _read(handle, timeout): +def _read(handle, timeout) -> tuple[int, int, bytes]: """Read an incoming packet from the receiver. :returns: a tuple of (report_id, devnumber, data), or `None`. diff --git a/lib/logitech_receiver/device.py b/lib/logitech_receiver/device.py index 812433cf..4cd5edc1 100644 --- a/lib/logitech_receiver/device.py +++ b/lib/logitech_receiver/device.py @@ -23,7 +23,6 @@ import threading import time import typing -from typing import Any from typing import Callable from typing import Optional from typing import Protocol @@ -51,7 +50,7 @@ _hidpp20 = hidpp20.Hidpp20() class LowLevelInterface(Protocol): - def open_path(self, path) -> Any: + def open_path(self, path) -> int: ... def find_paired_node(self, receiver_path: str, index: int, timeout: int): diff --git a/lib/logitech_receiver/settings_templates.py b/lib/logitech_receiver/settings_templates.py index 8cc96d5b..d69b2a4a 100644 --- a/lib/logitech_receiver/settings_templates.py +++ b/lib/logitech_receiver/settings_templates.py @@ -22,7 +22,6 @@ import struct import traceback from time import time -from typing import Any from typing import Callable from typing import Protocol @@ -1890,7 +1889,7 @@ class SettingsProtocol(Protocol): ... -def check_feature(device, settings_class: SettingsProtocol) -> None | bool | Any: +def check_feature(device, settings_class: SettingsProtocol) -> None | bool | SettingsProtocol: if settings_class.feature not in device.features: return if settings_class.min_version > device.features.get_feature_version(settings_class.feature): diff --git a/lib/solaar/listener.py b/lib/solaar/listener.py index 76a4b1af..06602931 100644 --- a/lib/solaar/listener.py +++ b/lib/solaar/listener.py @@ -15,10 +15,13 @@ ## with this program; if not, write to the Free Software Foundation, Inc., ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +from __future__ import annotations + import errno import logging import subprocess import time +import typing from collections import namedtuple from functools import partial @@ -36,9 +39,15 @@ from . import configuration from . import dbus from . import i18n +if typing.TYPE_CHECKING: + from hidapi.common import DeviceInfo + gi.require_version("Gtk", "3.0") # NOQA: E402 from gi.repository import GLib # NOQA: E402 # isort:skip +if typing.TYPE_CHECKING: + from logitech_receiver.device import Device + logger = logging.getLogger(__name__) ACTION_ADD = "add" @@ -235,7 +244,7 @@ class SolaarListener(listener.EventsListener): return f"" -def _process_bluez_dbus(device, path, dictionary, signature): +def _process_bluez_dbus(device: Device, path, dictionary: dict, signature): """Process bluez dbus property changed signals for device status changes to discover disconnections and connections. """ @@ -251,7 +260,7 @@ def _process_bluez_dbus(device, path, dictionary, signature): _cleanup_bluez_dbus(device) -def _cleanup_bluez_dbus(device): +def _cleanup_bluez_dbus(device: Device): """Remove dbus signal receiver for device""" if logger.isEnabledFor(logging.INFO): logger.info("bluez cleanup for %s", device) @@ -261,10 +270,10 @@ def _cleanup_bluez_dbus(device): _all_listeners = {} # all known receiver listeners, listeners that stop on their own may remain here -def _start(device_info): +def _start(device_info: DeviceInfo): assert _status_callback and _setting_callback - isDevice = device_info.isDevice - if not isDevice: + + if not device_info.isDevice: receiver_ = logitech_receiver.receiver.create_receiver(base, device_info, _setting_callback) else: receiver_ = logitech_receiver.device.create_device(base, device_info, _setting_callback) @@ -345,7 +354,7 @@ def setup_scanner(status_changed_callback, setting_changed_callback, error_callb base.notify_on_receivers_glib(GLib, _process_receiver_event) -def _process_add(device_info, retry): +def _process_add(device_info: DeviceInfo, retry): try: _start(device_info) except OSError as e: diff --git a/tests/logitech_receiver/test_device.py b/tests/logitech_receiver/test_device.py index f419b051..eda67884 100644 --- a/tests/logitech_receiver/test_device.py +++ b/tests/logitech_receiver/test_device.py @@ -31,7 +31,7 @@ class LowLevelInterfaceFake: def __init__(self, responses=None): self.responses = responses - def open_path(self, path): + def open_path(self, path) -> int: return fake_hidpp.open_path(path) def find_paired_node(self, receiver_path: str, index: int, timeout: int):