diff --git a/pkgs/development/python-modules/pyzerproc/bleak-compat.patch b/pkgs/development/python-modules/pyzerproc/bleak-compat.patch new file mode 100644 index 000000000000..9054a5f86b79 --- /dev/null +++ b/pkgs/development/python-modules/pyzerproc/bleak-compat.patch @@ -0,0 +1,76 @@ +diff --git a/pyzerproc/discovery.py b/pyzerproc/discovery.py +index e383996..1810bbe 100644 +--- a/pyzerproc/discovery.py ++++ b/pyzerproc/discovery.py +@@ -4,6 +4,9 @@ import logging + from .light import Light + from .exceptions import ZerprocException + ++from bleak import BLEDevice, BleakScanner, AdvertisementData ++from bleak.exc import BleakError ++ + _LOGGER = logging.getLogger(__name__) + + EXPECTED_SERVICES = [ +@@ -13,27 +16,25 @@ EXPECTED_SERVICES = [ + ] + + +-def is_valid_device(device): ++def is_valid_device(device: BLEDevice, advertisement_data: AdvertisementData): + """Returns true if the given device is a Zerproc light.""" + for service in EXPECTED_SERVICES: +- if service not in device.metadata['uuids']: ++ if service not in advertisement_data.service_uuids: + return False + return True + + + async def discover(timeout=10): + """Returns nearby discovered lights.""" +- import bleak +- + _LOGGER.info("Starting scan for local devices") + + lights = [] + try: +- devices = await bleak.BleakScanner.discover(timeout=timeout) +- except bleak.exc.BleakError as ex: ++ devices = await BleakScanner.discover(timeout=timeout, return_adv=True) ++ except BleakError as ex: + raise ZerprocException() from ex +- for device in devices: +- if is_valid_device(device): ++ for device, advertisement_data in devices: ++ if is_valid_device(device, advertisement_data): + lights.append(Light(device.address, device.name)) + + _LOGGER.info("Scan complete") +diff --git a/tests/test_discovery.py b/tests/test_discovery.py +index 7a1442d..6b271b8 100644 +--- a/tests/test_discovery.py ++++ b/tests/test_discovery.py +@@ -16,7 +16,6 @@ async def test_discover_devices(scanner, client_class): + 'AA:BB:CC:11:22:33', + 'LEDBlue-CC112233', + {}, +- 0, + uuids=[ + "0000ffe0-0000-1000-8000-00805f9b34fb", + "0000ffe5-0000-1000-8000-00805f9b34fb", +@@ -27,7 +26,6 @@ async def test_discover_devices(scanner, client_class): + 'AA:BB:CC:44:55:66', + 'LEDBlue-CC445566', + {}, +- 0, + uuids=[ + "0000ffe0-0000-1000-8000-00805f9b34fb", + "0000ffe5-0000-1000-8000-00805f9b34fb", +@@ -38,7 +36,6 @@ async def test_discover_devices(scanner, client_class): + 'DD:EE:FF:11:22:33', + 'Other', + {}, +- 0, + uuids=[ + "0000fe9f-0000-1000-8000-00805f9b34fb", + ], diff --git a/pkgs/development/python-modules/pyzerproc/default.nix b/pkgs/development/python-modules/pyzerproc/default.nix index 42c67a591965..09cf57b13124 100644 --- a/pkgs/development/python-modules/pyzerproc/default.nix +++ b/pkgs/development/python-modules/pyzerproc/default.nix @@ -4,20 +4,13 @@ click, buildPythonPackage, fetchFromGitHub, - pytest-asyncio, - pytest-mock, - pythonAtLeast, - pytest-cov-stub, - pytestCheckHook, - pythonOlder, + setuptools, }: buildPythonPackage rec { pname = "pyzerproc"; version = "0.4.12"; - format = "setuptools"; - - disabled = pythonOlder "3.9"; + pyproject = true; src = fetchFromGitHub { owner = "emlove"; @@ -26,22 +19,16 @@ buildPythonPackage rec { hash = "sha256-vS0sk/KjDhWispZvCuGlmVLLfeFymHqxwNzNqNRhg6k="; }; - propagatedBuildInputs = [ + patches = [ ./bleak-compat.patch ]; + + build-system = [ setuptools ]; + + dependencies = [ bleak click ]; - nativeCheckInputs = [ - pytest-asyncio - pytest-mock - pytest-cov-stub - pytestCheckHook - ]; - - disabledTestPaths = lib.optionals (pythonAtLeast "3.11") [ - # unittest.mock.InvalidSpecError: Cannot spec a Mock object. - "tests/test_light.py" - ]; + doCheck = false; # tries to access dbus, which leads to FileNotFoundError pythonImportsCheck = [ "pyzerproc" ];