Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pyudev for openSUSE:Factory checked in at 2025-11-08 16:33:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyudev (Old) and /work/SRC/openSUSE:Factory/.python-pyudev.new.1980 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyudev" Sat Nov 8 16:33:31 2025 rev:36 rq:1316423 version:0.24.4 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyudev/python-pyudev.changes 2024-11-07 16:23:45.048572708 +0100 +++ /work/SRC/openSUSE:Factory/.python-pyudev.new.1980/python-pyudev.changes 2025-11-08 16:36:27.181038734 +0100 @@ -1,0 +2,19 @@ +Fri Oct 31 11:44:57 UTC 2025 - Dirk Müller <[email protected]> + +- update to 0.24.4: + * Add device attributes unset(): + https://github.com/pyudev/pyudev/pull/525 + * Remove license classifier deprecated by PEP 639: + https://github.com/pyudev/pyudev/pull/522 + * Tidies and Maintenance: + https://github.com/pyudev/pyudev/pull/529 + https://github.com/pyudev/pyudev/pull/528 + https://github.com/pyudev/pyudev/pull/526 + https://github.com/pyudev/pyudev/pull/524 + https://github.com/pyudev/pyudev/pull/521 + https://github.com/pyudev/pyudev/pull/520 + https://github.com/pyudev/pyudev/pull/518 + https://github.com/pyudev/pyudev/pull/512 + https://github.com/pyudev/pyudev/pull/511 + +------------------------------------------------------------------- Old: ---- python-pyudev-0.24.3-gh.tar.gz New: ---- python-pyudev-0.24.4-gh.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyudev.spec ++++++ --- /var/tmp/diff_new_pack.nTzXNH/_old 2025-11-08 16:36:27.897068713 +0100 +++ /var/tmp/diff_new_pack.nTzXNH/_new 2025-11-08 16:36:27.901068881 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-pyudev # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-pyudev -Version: 0.24.3 +Version: 0.24.4 Release: 0 Summary: Udev bindings for Python License: LGPL-2.1-or-later ++++++ python-pyudev-0.24.3-gh.tar.gz -> python-pyudev-0.24.4-gh.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/.github/workflows/main.yml new/pyudev-0.24.4/.github/workflows/main.yml --- old/pyudev-0.24.3/.github/workflows/main.yml 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/.github/workflows/main.yml 2025-10-08 19:22:25.000000000 +0200 @@ -19,19 +19,21 @@ include: # MANDATORY CHECKS USING CURRENT DEVELOPMENT INTERPRETER - python-version: "3.12" - dependencies: pytest=="7" hypothesis + dependencies: pytest hypothesis task: PYTHONPATH=./src make -f Makefile test-travis # MANDATORY CHECKS USING LOWEST SUPPORTED INTERPRETER - python-version: "3.10" - dependencies: pytest=="7" hypothesis + dependencies: pytest hypothesis task: PYTHONPATH=./src make -f Makefile test-travis # MANDATORY CHECKS USING PYPY INTERPRETER - python-version: pypy-3.9 - dependencies: pytest=="7" hypothesis + dependencies: pytest hypothesis task: PYTHONPATH=./src make -f Makefile test-travis runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 + with: + persist-credentials: false - uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} @@ -54,12 +56,14 @@ task: yamllint - dependencies: python python3-build twine task: package - - dependencies: pylint + - dependencies: pylint python3-setuptools task: lint runs-on: ubuntu-latest - container: fedora:40 # CURRENT DEVELOPMENT ENVIRONMENT + container: fedora:41 # CURRENT DEVELOPMENT ENVIRONMENT steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 + with: + persist-credentials: false - name: Install dependencies run: > dnf install -y diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/CHANGES.rst new/pyudev-0.24.4/CHANGES.rst --- old/pyudev-0.24.3/CHANGES.rst 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/CHANGES.rst 2025-10-08 19:22:25.000000000 +0200 @@ -1,3 +1,24 @@ +0.24.4 +====== +Recommended development release: Fedora 41 + +- Add device attributes unset(): + https://github.com/pyudev/pyudev/pull/525 + +- Remove license classifier deprecated by PEP 639: + https://github.com/pyudev/pyudev/pull/522 + +- Tidies and Maintenance: + https://github.com/pyudev/pyudev/pull/529 + https://github.com/pyudev/pyudev/pull/528 + https://github.com/pyudev/pyudev/pull/526 + https://github.com/pyudev/pyudev/pull/524 + https://github.com/pyudev/pyudev/pull/521 + https://github.com/pyudev/pyudev/pull/520 + https://github.com/pyudev/pyudev/pull/518 + https://github.com/pyudev/pyudev/pull/512 + https://github.com/pyudev/pyudev/pull/511 + 0.24.3 ====== Recommended development release: Fedora 40 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/Makefile new/pyudev-0.24.4/Makefile --- old/pyudev-0.24.3/Makefile 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/Makefile 2025-10-08 19:22:25.000000000 +0200 @@ -19,7 +19,7 @@ lint: pylint setup.py - pylint src/pyudev/_os + pylint src/pyudev PYREVERSE_OPTS = --output=pdf view: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/README.rst new/pyudev-0.24.4/README.rst --- old/pyudev-0.24.3/README.rst 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/README.rst 2025-10-08 19:22:25.000000000 +0200 @@ -2,11 +2,6 @@ pyudev ###### -.. image:: https://secure.travis-ci.org/pyudev/pyudev.png?branch=develop - :target: http://travis-ci.org/pyudev/pyudev - -http://pyudev.readthedocs.org - pyudev is a LGPL_ licensed, pure Python_ binding for libudev_, the device and hardware management and information library for Linux. It supports almost all libudev_ functionality. You can enumerate devices, query device properties and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/setup.cfg new/pyudev-0.24.4/setup.cfg --- old/pyudev-0.24.3/setup.cfg 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/setup.cfg 2025-10-08 19:22:25.000000000 +0200 @@ -14,7 +14,6 @@ classifiers = Development Status :: 5 - Production/Stable Intended Audience :: Developers - License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) Operating System :: POSIX :: Linux Programming Language :: Python Programming Language :: Python :: 3 @@ -25,7 +24,7 @@ Topic :: System :: Operating System Kernels :: Linux [options] -python_requires = >=3.7 +python_requires = >=3.9 package_dir = =src diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/_ctypeslib/_errorcheckers.py new/pyudev-0.24.4/src/pyudev/_ctypeslib/_errorcheckers.py --- old/pyudev-0.24.3/src/pyudev/_ctypeslib/_errorcheckers.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/_ctypeslib/_errorcheckers.py 2025-10-08 19:22:25.000000000 +0200 @@ -65,8 +65,7 @@ # udev returns the *negative* errno code at this point errnum = -result raise exception_from_errno(errnum) - else: - return result + return result def check_errno_on_nonzero_return(result, _func, *_args): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/_ctypeslib/libc.py new/pyudev-0.24.4/src/pyudev/_ctypeslib/libc.py --- old/pyudev-0.24.3/src/pyudev/_ctypeslib/libc.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/_ctypeslib/libc.py 2025-10-08 19:22:25.000000000 +0200 @@ -30,10 +30,10 @@ FD_PAIR = c_int * 2 -SIGNATURES = dict( - pipe2=([FD_PAIR, c_int], c_int), -) +SIGNATURES = { + "pipe2": ([FD_PAIR, c_int], c_int), +} -ERROR_CHECKERS = dict( - pipe2=check_errno_on_nonzero_return, -) +ERROR_CHECKERS = { + "pipe2": check_errno_on_nonzero_return, +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/_ctypeslib/libudev.py new/pyudev-0.24.4/src/pyudev/_ctypeslib/libudev.py --- old/pyudev-0.24.3/src/pyudev/_ctypeslib/libudev.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/_ctypeslib/libudev.py 2025-10-08 19:22:25.000000000 +0200 @@ -34,240 +34,238 @@ ) -class udev(Structure): # pylint: disable=invalid-name +class udev(Structure): # pylint: disable=invalid-name,disable=too-few-public-methods """ Dummy for ``udev`` structure. """ - # pylint: disable=too-few-public-methods - pass - udev_p = POINTER(udev) # pylint: disable=invalid-name -class udev_enumerate(Structure): # pylint: disable=invalid-name +class udev_enumerate( + Structure +): # pylint: disable=invalid-name,disable=too-few-public-methods """ Dummy for ``udev_enumerate`` structure. """ - # pylint: disable=too-few-public-methods - pass - udev_enumerate_p = POINTER(udev_enumerate) # pylint: disable=invalid-name -class udev_list_entry(Structure): # pylint: disable=invalid-name +class udev_list_entry( + Structure +): # pylint: disable=invalid-name,disable=too-few-public-methods """ Dummy for ``udev_list_entry`` structure. """ - # pylint: disable=too-few-public-methods - pass - udev_list_entry_p = POINTER(udev_list_entry) # pylint: disable=invalid-name -class udev_device(Structure): # pylint: disable=invalid-name +class udev_device( + Structure +): # pylint: disable=invalid-name,disable=too-few-public-methods """ Dummy for ``udev_device`` structure. """ - # pylint: disable=too-few-public-methods - pass - udev_device_p = POINTER(udev_device) # pylint: disable=invalid-name -class udev_monitor(Structure): # pylint: disable=invalid-name +class udev_monitor( + Structure +): # pylint: disable=invalid-name,disable=too-few-public-methods """ Dummy for ``udev_device`` structure. """ - # pylint: disable=too-few-public-methods - pass - udev_monitor_p = POINTER(udev_monitor) # pylint: disable=invalid-name -class udev_hwdb(Structure): # pylint: disable=invalid-name +class udev_hwdb( + Structure +): # pylint: disable=invalid-name,disable=too-few-public-methods """ Dummy for ``udev_hwdb`` structure. """ - # pylint: disable=too-few-public-methods - pass - udev_hwdb_p = POINTER(udev_hwdb) # pylint: disable=invalid-name dev_t = c_ulonglong # pylint: disable=invalid-name -SIGNATURES = dict( +SIGNATURES = { # context - udev_new=([], udev_p), - udev_unref=([udev_p], None), - udev_ref=([udev_p], udev_p), - udev_get_sys_path=([udev_p], c_char_p), - udev_get_dev_path=([udev_p], c_char_p), - udev_get_run_path=([udev_p], c_char_p), - udev_get_log_priority=([udev_p], c_int), - udev_set_log_priority=([udev_p, c_int], None), - udev_enumerate_new=([udev_p], udev_enumerate_p), - udev_enumerate_ref=([udev_enumerate_p], udev_enumerate_p), - udev_enumerate_unref=([udev_enumerate_p], None), - udev_enumerate_add_match_subsystem=([udev_enumerate_p, c_char_p], c_int), - udev_enumerate_add_nomatch_subsystem=([udev_enumerate_p, c_char_p], c_int), - udev_enumerate_add_match_property=([udev_enumerate_p, c_char_p, c_char_p], c_int), - udev_enumerate_add_match_sysattr=([udev_enumerate_p, c_char_p, c_char_p], c_int), - udev_enumerate_add_nomatch_sysattr=([udev_enumerate_p, c_char_p, c_char_p], c_int), - udev_enumerate_add_match_tag=([udev_enumerate_p, c_char_p], c_int), - udev_enumerate_add_match_sysname=([udev_enumerate_p, c_char_p], c_int), - udev_enumerate_add_match_parent=([udev_enumerate_p, udev_device_p], c_int), - udev_enumerate_add_match_is_initialized=([udev_enumerate_p], c_int), - udev_enumerate_scan_devices=([udev_enumerate_p], c_int), - udev_enumerate_get_list_entry=([udev_enumerate_p], udev_list_entry_p), + "udev_new": ([], udev_p), + "udev_unref": ([udev_p], None), + "udev_ref": ([udev_p], udev_p), + "udev_get_sys_path": ([udev_p], c_char_p), + "udev_get_dev_path": ([udev_p], c_char_p), + "udev_get_run_path": ([udev_p], c_char_p), + "udev_get_log_priority": ([udev_p], c_int), + "udev_set_log_priority": ([udev_p, c_int], None), + "udev_enumerate_new": ([udev_p], udev_enumerate_p), + "udev_enumerate_ref": ([udev_enumerate_p], udev_enumerate_p), + "udev_enumerate_unref": ([udev_enumerate_p], None), + "udev_enumerate_add_match_subsystem": ([udev_enumerate_p, c_char_p], c_int), + "udev_enumerate_add_nomatch_subsystem": ([udev_enumerate_p, c_char_p], c_int), + "udev_enumerate_add_match_property": ( + [udev_enumerate_p, c_char_p, c_char_p], + c_int, + ), + "udev_enumerate_add_match_sysattr": ([udev_enumerate_p, c_char_p, c_char_p], c_int), + "udev_enumerate_add_nomatch_sysattr": ( + [udev_enumerate_p, c_char_p, c_char_p], + c_int, + ), + "udev_enumerate_add_match_tag": ([udev_enumerate_p, c_char_p], c_int), + "udev_enumerate_add_match_sysname": ([udev_enumerate_p, c_char_p], c_int), + "udev_enumerate_add_match_parent": ([udev_enumerate_p, udev_device_p], c_int), + "udev_enumerate_add_match_is_initialized": ([udev_enumerate_p], c_int), + "udev_enumerate_scan_devices": ([udev_enumerate_p], c_int), + "udev_enumerate_get_list_entry": ([udev_enumerate_p], udev_list_entry_p), # list entries - udev_list_entry_get_next=([udev_list_entry_p], udev_list_entry_p), - udev_list_entry_get_name=([udev_list_entry_p], c_char_p), - udev_list_entry_get_value=([udev_list_entry_p], c_char_p), + "udev_list_entry_get_next": ([udev_list_entry_p], udev_list_entry_p), + "udev_list_entry_get_name": ([udev_list_entry_p], c_char_p), + "udev_list_entry_get_value": ([udev_list_entry_p], c_char_p), # devices - udev_device_ref=([udev_device_p], udev_device_p), - udev_device_unref=([udev_device_p], None), - udev_device_new_from_syspath=([udev_p, c_char_p], udev_device_p), - udev_device_new_from_subsystem_sysname=( + "udev_device_ref": ([udev_device_p], udev_device_p), + "udev_device_unref": ([udev_device_p], None), + "udev_device_new_from_syspath": ([udev_p, c_char_p], udev_device_p), + "udev_device_new_from_subsystem_sysname": ( [udev_p, c_char_p, c_char_p], udev_device_p, ), - udev_device_new_from_devnum=([udev_p, c_char, dev_t], udev_device_p), - udev_device_new_from_device_id=([udev_p, c_char_p], udev_device_p), - udev_device_new_from_environment=([udev_p], udev_device_p), - udev_device_get_parent=([udev_device_p], udev_device_p), - udev_device_get_parent_with_subsystem_devtype=( + "udev_device_new_from_devnum": ([udev_p, c_char, dev_t], udev_device_p), + "udev_device_new_from_device_id": ([udev_p, c_char_p], udev_device_p), + "udev_device_new_from_environment": ([udev_p], udev_device_p), + "udev_device_get_parent": ([udev_device_p], udev_device_p), + "udev_device_get_parent_with_subsystem_devtype": ( [udev_device_p, c_char_p, c_char_p], udev_device_p, ), - udev_device_get_devpath=([udev_device_p], c_char_p), - udev_device_get_subsystem=([udev_device_p], c_char_p), - udev_device_get_syspath=([udev_device_p], c_char_p), - udev_device_get_sysnum=([udev_device_p], c_char_p), - udev_device_get_sysname=([udev_device_p], c_char_p), - udev_device_get_driver=([udev_device_p], c_char_p), - udev_device_get_devtype=([udev_device_p], c_char_p), - udev_device_get_devnode=([udev_device_p], c_char_p), - udev_device_get_property_value=([udev_device_p, c_char_p], c_char_p), - udev_device_get_sysattr_value=([udev_device_p, c_char_p], c_char_p), - udev_device_get_devnum=([udev_device_p], dev_t), - udev_device_get_action=([udev_device_p], c_char_p), - udev_device_get_seqnum=([udev_device_p], c_ulonglong), - udev_device_get_is_initialized=([udev_device_p], c_int), - udev_device_get_usec_since_initialized=([udev_device_p], c_ulonglong), - udev_device_get_devlinks_list_entry=([udev_device_p], udev_list_entry_p), - udev_device_get_tags_list_entry=([udev_device_p], udev_list_entry_p), - udev_device_get_properties_list_entry=([udev_device_p], udev_list_entry_p), - udev_device_get_sysattr_list_entry=([udev_device_p], udev_list_entry_p), - udev_device_set_sysattr_value=([udev_device_p, c_char_p, c_char_p], c_int), - udev_device_has_tag=([udev_device_p, c_char_p], c_int), + "udev_device_get_devpath": ([udev_device_p], c_char_p), + "udev_device_get_subsystem": ([udev_device_p], c_char_p), + "udev_device_get_syspath": ([udev_device_p], c_char_p), + "udev_device_get_sysnum": ([udev_device_p], c_char_p), + "udev_device_get_sysname": ([udev_device_p], c_char_p), + "udev_device_get_driver": ([udev_device_p], c_char_p), + "udev_device_get_devtype": ([udev_device_p], c_char_p), + "udev_device_get_devnode": ([udev_device_p], c_char_p), + "udev_device_get_property_value": ([udev_device_p, c_char_p], c_char_p), + "udev_device_get_sysattr_value": ([udev_device_p, c_char_p], c_char_p), + "udev_device_get_devnum": ([udev_device_p], dev_t), + "udev_device_get_action": ([udev_device_p], c_char_p), + "udev_device_get_seqnum": ([udev_device_p], c_ulonglong), + "udev_device_get_is_initialized": ([udev_device_p], c_int), + "udev_device_get_usec_since_initialized": ([udev_device_p], c_ulonglong), + "udev_device_get_devlinks_list_entry": ([udev_device_p], udev_list_entry_p), + "udev_device_get_tags_list_entry": ([udev_device_p], udev_list_entry_p), + "udev_device_get_properties_list_entry": ([udev_device_p], udev_list_entry_p), + "udev_device_get_sysattr_list_entry": ([udev_device_p], udev_list_entry_p), + "udev_device_set_sysattr_value": ([udev_device_p, c_char_p, c_char_p], c_int), + "udev_device_has_tag": ([udev_device_p, c_char_p], c_int), # monitoring - udev_monitor_ref=([udev_monitor_p], udev_monitor_p), - udev_monitor_unref=([udev_monitor_p], None), - udev_monitor_new_from_netlink=([udev_p, c_char_p], udev_monitor_p), - udev_monitor_enable_receiving=([udev_monitor_p], c_int), - udev_monitor_set_receive_buffer_size=([udev_monitor_p, c_int], c_int), - udev_monitor_get_fd=([udev_monitor_p], c_int), - udev_monitor_receive_device=([udev_monitor_p], udev_device_p), - udev_monitor_filter_add_match_subsystem_devtype=( + "udev_monitor_ref": ([udev_monitor_p], udev_monitor_p), + "udev_monitor_unref": ([udev_monitor_p], None), + "udev_monitor_new_from_netlink": ([udev_p, c_char_p], udev_monitor_p), + "udev_monitor_enable_receiving": ([udev_monitor_p], c_int), + "udev_monitor_set_receive_buffer_size": ([udev_monitor_p, c_int], c_int), + "udev_monitor_get_fd": ([udev_monitor_p], c_int), + "udev_monitor_receive_device": ([udev_monitor_p], udev_device_p), + "udev_monitor_filter_add_match_subsystem_devtype": ( [udev_monitor_p, c_char_p, c_char_p], c_int, ), - udev_monitor_filter_add_match_tag=([udev_monitor_p, c_char_p], c_int), - udev_monitor_filter_update=([udev_monitor_p], c_int), - udev_monitor_filter_remove=([udev_monitor_p], c_int), + "udev_monitor_filter_add_match_tag": ([udev_monitor_p, c_char_p], c_int), + "udev_monitor_filter_update": ([udev_monitor_p], c_int), + "udev_monitor_filter_remove": ([udev_monitor_p], c_int), # hwdb - udev_hwdb_ref=([udev_hwdb_p], udev_hwdb_p), - udev_hwdb_unref=([udev_hwdb_p], None), - udev_hwdb_new=([udev_p], udev_hwdb_p), - udev_hwdb_get_properties_list_entry=( + "udev_hwdb_ref": ([udev_hwdb_p], udev_hwdb_p), + "udev_hwdb_unref": ([udev_hwdb_p], None), + "udev_hwdb_new": ([udev_p], udev_hwdb_p), + "udev_hwdb_get_properties_list_entry": ( [udev_hwdb_p, c_char_p, c_uint], udev_list_entry_p, ), -) +} -ERROR_CHECKERS = dict( - udev_device_get_action=None, - udev_device_get_devlinks_list_entry=None, - udev_device_get_devnode=None, - udev_device_get_devnum=None, - udev_device_get_devpath=None, - udev_device_get_devtype=None, - udev_device_get_driver=None, - udev_device_get_is_initialized=None, - udev_device_get_parent=None, - udev_device_get_parent_with_subsystem_devtype=None, - udev_device_get_properties_list_entry=None, - udev_device_get_property_value=None, - udev_device_get_seqnum=None, - udev_device_get_subsystem=None, - udev_device_get_sysattr_list_entry=None, - udev_device_get_sysattr_value=None, - udev_device_get_sysname=None, - udev_device_get_sysnum=None, - udev_device_get_syspath=None, - udev_device_get_tags_list_entry=None, - udev_device_get_usec_since_initialized=None, - udev_device_has_tag=None, - udev_device_new_from_device_id=None, - udev_device_new_from_devnum=None, - udev_device_new_from_environment=None, - udev_device_new_from_subsystem_sysname=None, - udev_device_new_from_syspath=None, - udev_device_ref=None, - udev_device_unref=None, - udev_device_set_sysattr_value=check_negative_errorcode, - udev_enumerate_add_match_parent=check_negative_errorcode, - udev_enumerate_add_match_subsystem=check_negative_errorcode, - udev_enumerate_add_nomatch_subsystem=check_negative_errorcode, - udev_enumerate_add_match_property=check_negative_errorcode, - udev_enumerate_add_match_sysattr=check_negative_errorcode, - udev_enumerate_add_nomatch_sysattr=check_negative_errorcode, - udev_enumerate_add_match_tag=check_negative_errorcode, - udev_enumerate_add_match_sysname=check_negative_errorcode, - udev_enumerate_add_match_is_initialized=check_negative_errorcode, - udev_enumerate_get_list_entry=None, - udev_enumerate_new=None, - udev_enumerate_ref=None, - udev_enumerate_scan_devices=None, - udev_enumerate_unref=None, - udev_get_dev_path=None, - udev_get_log_priority=None, - udev_get_run_path=None, - udev_get_sys_path=None, - udev_hwdb_get_properties_list_entry=None, - udev_hwdb_new=None, - udev_hwdb_ref=None, - udev_hwdb_unref=None, - udev_list_entry_get_name=None, - udev_list_entry_get_next=None, - udev_list_entry_get_value=None, - udev_monitor_set_receive_buffer_size=check_errno_on_nonzero_return, +ERROR_CHECKERS = { + "udev_device_get_action": None, + "udev_device_get_devlinks_list_entry": None, + "udev_device_get_devnode": None, + "udev_device_get_devnum": None, + "udev_device_get_devpath": None, + "udev_device_get_devtype": None, + "udev_device_get_driver": None, + "udev_device_get_is_initialized": None, + "udev_device_get_parent": None, + "udev_device_get_parent_with_subsystem_devtype": None, + "udev_device_get_properties_list_entry": None, + "udev_device_get_property_value": None, + "udev_device_get_seqnum": None, + "udev_device_get_subsystem": None, + "udev_device_get_sysattr_list_entry": None, + "udev_device_get_sysattr_value": None, + "udev_device_get_sysname": None, + "udev_device_get_sysnum": None, + "udev_device_get_syspath": None, + "udev_device_get_tags_list_entry": None, + "udev_device_get_usec_since_initialized": None, + "udev_device_has_tag": None, + "udev_device_new_from_device_id": None, + "udev_device_new_from_devnum": None, + "udev_device_new_from_environment": None, + "udev_device_new_from_subsystem_sysname": None, + "udev_device_new_from_syspath": None, + "udev_device_ref": None, + "udev_device_unref": None, + "udev_device_set_sysattr_value": check_negative_errorcode, + "udev_enumerate_add_match_parent": check_negative_errorcode, + "udev_enumerate_add_match_subsystem": check_negative_errorcode, + "udev_enumerate_add_nomatch_subsystem": check_negative_errorcode, + "udev_enumerate_add_match_property": check_negative_errorcode, + "udev_enumerate_add_match_sysattr": check_negative_errorcode, + "udev_enumerate_add_nomatch_sysattr": check_negative_errorcode, + "udev_enumerate_add_match_tag": check_negative_errorcode, + "udev_enumerate_add_match_sysname": check_negative_errorcode, + "udev_enumerate_add_match_is_initialized": check_negative_errorcode, + "udev_enumerate_get_list_entry": None, + "udev_enumerate_new": None, + "udev_enumerate_ref": None, + "udev_enumerate_scan_devices": None, + "udev_enumerate_unref": None, + "udev_get_dev_path": None, + "udev_get_log_priority": None, + "udev_get_run_path": None, + "udev_get_sys_path": None, + "udev_hwdb_get_properties_list_entry": None, + "udev_hwdb_new": None, + "udev_hwdb_ref": None, + "udev_hwdb_unref": None, + "udev_list_entry_get_name": None, + "udev_list_entry_get_next": None, + "udev_list_entry_get_value": None, + "udev_monitor_set_receive_buffer_size": check_errno_on_nonzero_return, # libudev doc says, enable_receiving returns a negative errno, but tests # show that this is not reliable, so query the real error code - udev_monitor_enable_receiving=check_errno_on_nonzero_return, - udev_monitor_receive_device=check_errno_on_null_pointer_return, - udev_monitor_ref=None, - udev_monitor_filter_add_match_subsystem_devtype=check_negative_errorcode, - udev_monitor_filter_add_match_tag=check_negative_errorcode, - udev_monitor_filter_update=check_errno_on_nonzero_return, - udev_monitor_filter_remove=check_errno_on_nonzero_return, - udev_monitor_get_fd=None, - udev_monitor_new_from_netlink=None, - udev_monitor_unref=None, - udev_new=None, - udev_ref=None, - udev_set_log_priority=None, - udev_unref=None, -) + "udev_monitor_enable_receiving": check_errno_on_nonzero_return, + "udev_monitor_receive_device": check_errno_on_null_pointer_return, + "udev_monitor_ref": None, + "udev_monitor_filter_add_match_subsystem_devtype": check_negative_errorcode, + "udev_monitor_filter_add_match_tag": check_negative_errorcode, + "udev_monitor_filter_update": check_errno_on_nonzero_return, + "udev_monitor_filter_remove": check_errno_on_nonzero_return, + "udev_monitor_get_fd": None, + "udev_monitor_new_from_netlink": None, + "udev_monitor_unref": None, + "udev_new": None, + "udev_ref": None, + "udev_set_log_priority": None, + "udev_unref": None, +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/_ctypeslib/utils.py new/pyudev-0.24.4/src/pyudev/_ctypeslib/utils.py --- old/pyudev-0.24.3/src/pyudev/_ctypeslib/utils.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/_ctypeslib/utils.py 2025-10-08 19:22:25.000000000 +0200 @@ -48,7 +48,7 @@ """ library_name = find_library(name) if not library_name: - raise ImportError("No library named %s" % name) + raise ImportError(f"No library named {name}") lib = CDLL(library_name, use_errno=True) # Add function signatures for funcname, signature in signatures.items(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/_errors.py new/pyudev-0.24.4/src/pyudev/_errors.py --- old/pyudev-0.24.3/src/pyudev/_errors.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/_errors.py 2025-10-08 19:22:25.000000000 +0200 @@ -63,7 +63,7 @@ return self.args[0] def __str__(self): - return "No device at {0!r}".format(self.sys_path) + return f"No device at {self.sys_path!r}" class DeviceNotFoundByFileError(DeviceNotFoundError): @@ -114,7 +114,7 @@ return self.args[1] def __str__(self): - return "No device {0.sys_name!r} in {0.subsystem!r}".format(self) + return f"No device {self.sys_name!r} in {self.subsystem!r}" class DeviceNotFoundByNumberError(DeviceNotFoundError): @@ -142,7 +142,7 @@ return self.args[1] def __str__(self): - return "No {0.device_type} device with number " "{0.device_number}".format(self) + return f"No {self.device_type} device with number {self.device_number}" class DeviceNotFoundInEnvironmentError(DeviceNotFoundError): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/_qt_base.py new/pyudev-0.24.4/src/pyudev/_qt_base.py --- old/pyudev-0.24.3/src/pyudev/_qt_base.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/_qt_base.py 2025-10-08 19:22:25.000000000 +0200 @@ -89,10 +89,10 @@ "move": self.deviceMoved, } # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( - "Will be removed in 1.0. " "Use pyudev.pyqt4.MonitorObserver instead.", + "Will be removed in 1.0. Use pyudev.pyqt4.MonitorObserver instead.", DeprecationWarning, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/_util.py new/pyudev-0.24.4/src/pyudev/_util.py --- old/pyudev-0.24.3/src/pyudev/_util.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/_util.py 2025-10-08 19:22:25.000000000 +0200 @@ -86,7 +86,7 @@ :exc:`~exceptions.ValueError`. """ if value not in ("1", "0"): - raise ValueError("Not a boolean value: {0!r}".format(value)) + raise ValueError(f"Not a boolean value: {value!r}") return value == "1" @@ -122,10 +122,9 @@ mode = os.stat(filename).st_mode if stat.S_ISCHR(mode): return "char" - elif stat.S_ISBLK(mode): + if stat.S_ISBLK(mode): return "block" - else: - raise ValueError("not a device file: {0!r}".format(filename)) + raise ValueError(f"not a device file: {filename!r}") def eintr_retry_call(func, *args, **kwargs): @@ -145,7 +144,7 @@ # select.error inherits from Exception instead of OSError in Python 2 # isort: STDLIB - import select + import select # pylint: disable=import-outside-toplevel while True: try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/device/_device.py new/pyudev-0.24.4/src/pyudev/device/_device.py --- old/pyudev-0.24.3/src/pyudev/device/_device.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/device/_device.py 2025-10-08 19:22:25.000000000 +0200 @@ -27,7 +27,6 @@ import collections import os import re -import sys from datetime import timedelta # isort: LOCAL @@ -101,7 +100,7 @@ .. versionadded:: 0.18 """ - device = context._libudev.udev_device_new_from_syspath( + device = context._libudev.udev_device_new_from_syspath( # pylint: disable=protected-access context, ensure_byte_string(sys_path) ) if not device: @@ -132,7 +131,7 @@ .. versionadded:: 0.18 """ sys_name = sys_name.replace("/", "!") - device = context._libudev.udev_device_new_from_subsystem_sysname( + device = context._libudev.udev_device_new_from_subsystem_sysname( # pylint: disable=protected-access context, ensure_byte_string(subsystem), ensure_byte_string(sys_name) ) if not device: @@ -176,7 +175,7 @@ .. versionadded:: 0.18 """ - device = context._libudev.udev_device_new_from_devnum( + device = context._libudev.udev_device_new_from_devnum( # pylint: disable=protected-access context, ensure_byte_string(typ[0]), number ) if not device: @@ -221,7 +220,7 @@ device_type = get_device_type(filename) device_number = os.stat(filename).st_rdev except (EnvironmentError, ValueError) as err: - raise DeviceNotFoundByFileError(err) + raise DeviceNotFoundByFileError(err) from err return cls.from_device_number(context, device_type, device_number) @@ -243,8 +242,7 @@ ) if dev is not None: return dev - else: - raise DeviceNotFoundByInterfaceIndexError(ifindex) + raise DeviceNotFoundByInterfaceIndexError(ifindex) @classmethod def from_kernel_device(cls, context, kernel_device): @@ -266,18 +264,15 @@ int(match.group("major")), int(match.group("minor")) ) return cls.from_device_number(context, switch_char, number) - else: - raise DeviceNotFoundByKernelDeviceError(kernel_device) - elif switch_char == "n": + raise DeviceNotFoundByKernelDeviceError(kernel_device) + if switch_char == "n": return cls.from_interface_index(context, rest) - elif switch_char == "+": + if switch_char == "+": (subsystem, _, kernel_device_name) = rest.partition(":") if kernel_device_name and subsystem: return cls.from_name(context, subsystem, kernel_device_name) - else: - raise DeviceNotFoundByKernelDeviceError(kernel_device) - else: raise DeviceNotFoundByKernelDeviceError(kernel_device) + raise DeviceNotFoundByKernelDeviceError(kernel_device) @classmethod def from_environment(cls, context): @@ -300,7 +295,9 @@ .. versionadded:: 0.18 """ - device = context._libudev.udev_device_new_from_environment(context) + device = context._libudev.udev_device_new_from_environment( # pylint: disable=protected-access + context + ) if not device: raise DeviceNotFoundInEnvironmentError() return Device(context, device) @@ -367,7 +364,7 @@ Use :class:`Devices.from_path` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use equivalent Devices method instead.", @@ -389,7 +386,7 @@ Use :class:`Devices.from_sys_path` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use equivalent Devices method instead.", @@ -406,7 +403,7 @@ Use :class:`Devices.from_name` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use equivalent Devices method instead.", @@ -423,7 +420,7 @@ Use :class:`Devices.from_device_number` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use equivalent Devices method instead.", @@ -440,7 +437,7 @@ Use :class:`Devices.from_device_file` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use equivalent Devices method instead.", @@ -457,7 +454,7 @@ Use :class:`Devices.from_environment` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use equivalent Devices method instead.", @@ -476,7 +473,7 @@ self._libudev.udev_device_unref(self) def __repr__(self): - return "Device({0.sys_path!r})".format(self) + return f"Device({self.sys_path!r})" @property def parent(self): @@ -579,7 +576,7 @@ Will be removed in 1.0. Use :attr:`ancestors` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use Device.ancestors instead.", @@ -922,7 +919,7 @@ Will be removed in 1.0. Access properties with Device.properties. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Access properties with Device.properties.", @@ -939,7 +936,7 @@ Will be removed in 1.0. Access properties with Device.properties. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Access properties with Device.properties.", @@ -963,7 +960,7 @@ Will be removed in 1.0. Access properties with Device.properties. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Access properties with Device.properties.", @@ -988,7 +985,7 @@ Will be removed in 1.0. Use Device.properties.asint() instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use Device.properties.asint instead.", @@ -1017,7 +1014,7 @@ Will be removed in 1.0. Use Device.properties.asbool() instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use Device.properties.asbool instead.", @@ -1244,6 +1241,17 @@ """ return string_to_bool(self.asstring(attribute)) + def unset(self, attribute): + """ + Clear the attribute's cached value in udev. + + :param attribute: the key for an attribute value + :type attribute: unicode or byte string + """ + self._libudev.udev_device_set_sysattr_value( + self.device, ensure_byte_string(attribute), None + ) + class Tags(collections.abc.Iterable, collections.abc.Container): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/discover.py new/pyudev-0.24.4/src/pyudev/discover.py --- old/pyudev-0.24.3/src/pyudev/discover.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/discover.py 2025-10-08 19:22:25.000000000 +0200 @@ -101,7 +101,6 @@ :param Context context: the pyudev context """ - pass @classmethod def get_devices(cls, context, value): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/glib.py new/pyudev-0.24.4/src/pyudev/glib.py --- old/pyudev-0.24.3/src/pyudev/glib.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/glib.py 2025-10-08 19:22:25.000000000 +0200 @@ -181,10 +181,10 @@ GObject.Object.__init__(self) self._setup_observer(monitor) # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( - "Will be removed in 1.0. " "Use pyudev.glib.MonitorObserver instead.", + "Will be removed in 1.0. Use pyudev.glib.MonitorObserver instead.", DeprecationWarning, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/monitor.py new/pyudev-0.24.4/src/pyudev/monitor.py --- old/pyudev-0.24.3/src/pyudev/monitor.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/monitor.py 2025-10-08 19:22:25.000000000 +0200 @@ -109,10 +109,9 @@ """ if source not in ("kernel", "udev"): raise ValueError( - 'Invalid source: {0!r}. Must be one of "udev" ' - 'or "kernel"'.format(source) + f'Invalid source: {source!r}. Must be one of "udev" or "kernel"' ) - monitor = context._libudev.udev_monitor_new_from_netlink( + monitor = context._libudev.udev_monitor_new_from_netlink( # pylint: disable=protected-access context, ensure_byte_string(source) ) if not monitor: @@ -225,7 +224,7 @@ Will be removed in 1.0. Use :meth:`start()` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use Monitor.start() instead.", DeprecationWarning @@ -297,11 +296,12 @@ if error.errno in (errno.EAGAIN, errno.EWOULDBLOCK): # No data available return None - elif error.errno == errno.EINTR: + + if error.errno == errno.EINTR: # Try again if our system call was interrupted continue - else: - raise + + raise def poll(self, timeout=None): """ @@ -388,7 +388,7 @@ Will be removed in 1.0. Use :meth:`Monitor.poll()` instead. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use Monitor.poll() instead.", DeprecationWarning @@ -415,7 +415,7 @@ instead, or monitor asynchronously with :class:`MonitorObserver`. """ # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( "Will be removed in 1.0. Use an explicit loop over " @@ -498,7 +498,7 @@ """ if callback is None and event_handler is None: raise ValueError("callback missing") - elif callback is not None and event_handler is not None: + if callback is not None and event_handler is not None: raise ValueError("Use either callback or event handler") Thread.__init__(self, *args, **kwargs) @@ -508,14 +508,16 @@ self._stop_event = None if event_handler is not None: # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( '"event_handler" argument will be removed in 1.0. ' "Use Monitor.poll() instead.", DeprecationWarning, ) - callback = lambda d: event_handler(d.action, d) + callback = lambda d: event_handler( # pylint: disable=unnecessary-lambda-assignment + d.action, d + ) self._callback = callback def start(self): @@ -536,7 +538,8 @@ # return from the thread self._stop_event.source.close() return - elif file_descriptor == self.monitor.fileno() and event == "r": + + if file_descriptor == self.monitor.fileno() and event == "r": read_device = partial( eintr_retry_call, self.monitor.poll, timeout=0 ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/version.py new/pyudev-0.24.4/src/pyudev/version.py --- old/pyudev-0.24.3/src/pyudev/version.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/version.py 2025-10-08 19:22:25.000000000 +0200 @@ -23,8 +23,8 @@ .. moduleauthor:: mulhern <[email protected]> """ -__version_info__ = (0, 24, 3, "") -__version__ = "%s%s" % ( - ".".join(str(x) for x in __version_info__[:3]), - "".join(str(x) for x in __version_info__[3:]), +__version_info__ = (0, 24, 4, "") +__version__ = ( + f'{".".join(str(x) for x in __version_info__[:3])}' + f'{"".join(str(x) for x in __version_info__[3:])}' ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/src/pyudev/wx.py new/pyudev-0.24.4/src/pyudev/wx.py --- old/pyudev-0.24.3/src/pyudev/wx.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/src/pyudev/wx.py 2025-10-08 19:22:25.000000000 +0200 @@ -135,10 +135,10 @@ def __init__(self, monitor): MonitorObserver.__init__(self, monitor) # isort: STDLIB - import warnings + import warnings # pylint: disable=import-outside-toplevel warnings.warn( - "Will be removed in 1.0. " "Use pyudev.wx.MonitorObserver instead.", + "Will be removed in 1.0. Use pyudev.wx.MonitorObserver instead.", DeprecationWarning, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/tests/_device_tests/_attributes_tests.py new/pyudev-0.24.4/tests/_device_tests/_attributes_tests.py --- old/pyudev-0.24.3/tests/_device_tests/_attributes_tests.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/tests/_device_tests/_attributes_tests.py 2025-10-08 19:22:25.000000000 +0200 @@ -47,10 +47,10 @@ Test that attribute value exists and is instance of bytes. """ device = Devices.from_path(a_context, device_datum.device_path) - assert all( - isinstance(device.attributes.get(key), bytes) - for key in device_datum.attributes.keys() - ) + for key in device_datum.attributes.keys(): + value = device.attributes.get(key) + if value is not None: + assert isinstance(value, bytes) @given(strategies.sampled_from(_DEVICES)) @settings(max_examples=5) @@ -86,10 +86,11 @@ Test that attribute exists for actual device and is unicode. """ device = Devices.from_path(a_context, device_datum.device_path) - assert all( - is_unicode_string(device.attributes.asstring(key)) - for key in device_datum.attributes.keys() - ) + for key in device_datum.attributes.keys(): + try: + assert is_unicode_string(device.attributes.asstring(key)) + except KeyError: + pass @given(_CONTEXT_STRATEGY, strategies.sampled_from(_DEVICE_DATA)) @settings(max_examples=10) @@ -102,8 +103,12 @@ try: value = int(value) except ValueError: - with pytest.raises(ValueError): + try: device.attributes.asint(key) + except KeyError: + pass + except ValueError: + pass @given(_CONTEXT_STRATEGY, strategies.sampled_from(_DEVICE_DATA)) @settings(max_examples=5) @@ -119,8 +124,19 @@ except KeyError: pass else: - with pytest.raises(ValueError): - try: - device.attributes.asbool(key) - except KeyError: - pass + try: + device.attributes.asbool(key) + except KeyError: + pass + except ValueError: + pass + + @given(_CONTEXT_STRATEGY, strategies.sampled_from(_DEVICE_DATA)) + @settings(max_examples=5) + def test_unsetitem(self, a_context, device_datum): + """ + Test that attribute value can be unset. + """ + device = Devices.from_path(a_context, device_datum.device_path) + for key in device_datum.attributes.keys(): + device.attributes.unset(key) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyudev-0.24.3/tests/test_monitor.py new/pyudev-0.24.4/tests/test_monitor.py --- old/pyudev-0.24.3/tests/test_monitor.py 2024-05-10 20:16:05.000000000 +0200 +++ new/pyudev-0.24.4/tests/test_monitor.py 2025-10-08 19:22:25.000000000 +0200 @@ -277,10 +277,10 @@ self.observer = MonitorObserver(monitor, callback=self.callback) return self.observer - def setup(self): + def setup_method(self): self.events = [] - def teardown(self): + def teardown_method(self): self.events = None def test_deprecated_handler(self, fake_monitor, fake_monitor_device):
