Replace action strings with constants

Avoids spelling mistakes and helps readability.
This commit is contained in:
MattHag 2024-09-28 20:48:05 +02:00 committed by Peter F. Patel-Schneider
parent cba3533869
commit 54aace050c
3 changed files with 23 additions and 15 deletions

View File

@ -44,6 +44,8 @@ if typing.TYPE_CHECKING:
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
ACTION_ADD = "add"
ACTION_REMOVE = "remove"
# Global handle to hidapi # Global handle to hidapi
_hidapi = None _hidapi = None
@ -213,10 +215,10 @@ class _DeviceMonitor(Thread):
current_devices = {tuple(dev.items()): dev for dev in _enumerate_devices()} current_devices = {tuple(dev.items()): dev for dev in _enumerate_devices()}
for key, device in self.prev_devices.items(): for key, device in self.prev_devices.items():
if key not in current_devices: if key not in current_devices:
self.device_callback("remove", device) self.device_callback(ACTION_REMOVE, device)
for key, device in current_devices.items(): for key, device in current_devices.items():
if key not in self.prev_devices: if key not in self.prev_devices:
self.device_callback("add", device) self.device_callback(ACTION_ADD, device)
self.prev_devices = current_devices self.prev_devices = current_devices
sleep(self.polling_delay) sleep(self.polling_delay)
@ -268,7 +270,7 @@ def _match(action, device, filterfn):
return return
isDevice = filter_func.get("isDevice") isDevice = filter_func.get("isDevice")
if action == "add": if action == ACTION_ADD:
d_info = DeviceInfo( d_info = DeviceInfo(
path=device["path"].decode(), path=device["path"].decode(),
bus_id=bus_id, bus_id=bus_id,
@ -286,7 +288,7 @@ def _match(action, device, filterfn):
) )
return d_info return d_info
elif action == "remove": elif action == ACTION_REMOVE:
d_info = DeviceInfo( d_info = DeviceInfo(
path=device["path"].decode(), path=device["path"].decode(),
bus_id=None, bus_id=None,
@ -326,11 +328,11 @@ def monitor_glib(glib: GLib, callback, filterfn):
def device_callback(action, device): def device_callback(action, device):
# print(f"device_callback({action}): {device}") # print(f"device_callback({action}): {device}")
if action == "add": if action == ACTION_ADD:
d_info = _match(action, device, filterfn) d_info = _match(action, device, filterfn)
if d_info: if d_info:
glib.idle_add(callback, action, d_info) glib.idle_add(callback, action, d_info)
elif action == "remove": elif action == ACTION_REMOVE:
# Removed devices will be detected by Solaar directly # Removed devices will be detected by Solaar directly
pass pass
@ -347,7 +349,7 @@ def enumerate(filterfn):
:returns: a list of matching ``DeviceInfo`` tuples. :returns: a list of matching ``DeviceInfo`` tuples.
""" """
for device in _enumerate_devices(): for device in _enumerate_devices():
d_info = _match("add", device, filterfn) d_info = _match(ACTION_ADD, device, filterfn)
if d_info: if d_info:
yield d_info yield d_info

View File

@ -51,6 +51,9 @@ logger = logging.getLogger(__name__)
fileopen = open fileopen = open
ACTION_ADD = "add"
ACTION_REMOVE = "remove"
# #
# exposed API # exposed API
# docstrings mostly copied from hidapi.h # docstrings mostly copied from hidapi.h
@ -108,7 +111,8 @@ def _match(action, device, filter_func: typing.Callable[[int, int, int, bool, bo
if not hidpp_short and not hidpp_long: if not hidpp_short and not hidpp_long:
return return
except Exception as e: # if can't process report descriptor fall back to old scheme except Exception as e: # if can't process report descriptor fall back to old scheme
hidpp_short = hidpp_long = None hidpp_short = None
hidpp_long = None
logger.info( logger.info(
"Report Descriptor not processed for DEVICE %s BID %s VID %s PID %s: %s", device.device_node, bid, vid, pid, e "Report Descriptor not processed for DEVICE %s BID %s VID %s PID %s: %s", device.device_node, bid, vid, pid, e
) )
@ -119,7 +123,7 @@ def _match(action, device, filter_func: typing.Callable[[int, int, int, bool, bo
interface_number = filtered_result.get("usb_interface") interface_number = filtered_result.get("usb_interface")
isDevice = filtered_result.get("isDevice") isDevice = filtered_result.get("isDevice")
if action == "add": if action == ACTION_ADD:
hid_driver_name = hid_device.properties.get("DRIVER") hid_driver_name = hid_device.properties.get("DRIVER")
intf_device = device.find_parent("usb", "usb_interface") intf_device = device.find_parent("usb", "usb_interface")
usb_interface = None if intf_device is None else intf_device.attributes.asint("bInterfaceNumber") usb_interface = None if intf_device is None else intf_device.attributes.asint("bInterfaceNumber")
@ -157,7 +161,7 @@ def _match(action, device, filter_func: typing.Callable[[int, int, int, bool, bo
) )
return d_info return d_info
elif action == "remove": elif action == ACTION_REMOVE:
d_info = DeviceInfo( d_info = DeviceInfo(
path=device.device_node, path=device.device_node,
bus_id=None, bus_id=None,
@ -236,11 +240,11 @@ def monitor_glib(glib: GLib, callback, filterfn):
if event: if event:
action, device = event action, device = event
# print ("***", action, device) # print ("***", action, device)
if action == "add": if action == ACTION_ADD:
d_info = _match(action, device, filterfn) d_info = _match(action, device, filterfn)
if d_info: if d_info:
glib.idle_add(cb, action, d_info) glib.idle_add(cb, action, d_info)
elif action == "remove": elif action == ACTION_REMOVE:
# the GLib notification does _not_ match! # the GLib notification does _not_ match!
pass pass
return True return True
@ -272,7 +276,7 @@ def enumerate(filter_func: typing.Callable[[int, int, int, bool, bool], dict[str
if logger.isEnabledFor(logging.DEBUG): if logger.isEnabledFor(logging.DEBUG):
logger.debug("Starting dbus enumeration") logger.debug("Starting dbus enumeration")
for dev in pyudev.Context().list_devices(subsystem="hidraw"): for dev in pyudev.Context().list_devices(subsystem="hidraw"):
dev_info = _match("add", dev, filter_func) dev_info = _match(ACTION_ADD, dev, filter_func)
if dev_info: if dev_info:
yield dev_info yield dev_info

View File

@ -41,6 +41,8 @@ from gi.repository import GLib # NOQA: E402 # isort:skip
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
ACTION_ADD = "add"
_GHOST_DEVICE = namedtuple("_GHOST_DEVICE", ("receiver", "number", "name", "kind", "online")) _GHOST_DEVICE = namedtuple("_GHOST_DEVICE", ("receiver", "number", "name", "kind", "online"))
_GHOST_DEVICE.__bool__ = lambda self: False _GHOST_DEVICE.__bool__ = lambda self: False
_GHOST_DEVICE.__nonzero__ = _GHOST_DEVICE.__bool__ _GHOST_DEVICE.__nonzero__ = _GHOST_DEVICE.__bool__
@ -278,7 +280,7 @@ def start_all():
if logger.isEnabledFor(logging.INFO): if logger.isEnabledFor(logging.INFO):
logger.info("starting receiver listening threads") logger.info("starting receiver listening threads")
for device_info in base.receivers_and_devices(): for device_info in base.receivers_and_devices():
_process_receiver_event("add", device_info) _process_receiver_event(ACTION_ADD, device_info)
def stop_all(): def stop_all():
@ -368,6 +370,6 @@ def _process_receiver_event(action, device_info):
if listener_thread is not None: if listener_thread is not None:
assert isinstance(listener_thread, SolaarListener) assert isinstance(listener_thread, SolaarListener)
listener_thread.stop() listener_thread.stop()
if action == "add": if action == ACTION_ADD:
_process_add(device_info, 3) _process_add(device_info, 3)
return False return False