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):

Reply via email to