pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/sysutils/py-watchdog



Module Name:    pkgsrc
Committed By:   adam
Date:           Mon Nov  2 11:21:10 UTC 2026

Modified Files:
        pkgsrc/sysutils/py-watchdog: Makefile PLIST distinfo

Log Message:
py-watchdog: updated to 7.0.0

7.0.0

**Breaking Changes**

- Drop support for Python 3.9 and 3.10.
- [core] Changed pattern matching mechanism from using ``path.match()`` to ``path.full_match()``. Users must update patterns to glob-like syntax: e.g., `*.py` to `**/*.py`.
- [core] Added ``FileAttribEvent`` and ``DirAttribEvent`` for file and directory metadata modifications (such as permissions or timestamps), separate from content modifications. These events no 
longer trigger ``on_modified()``; implement ``on_attrib()`` to handle them. On Windows 10 (1709+) and Windows Server 2016+, ``ReadDirectoryChangesExW`` is used to differentiate attribute 
modifications, with fallback to ``ReadDirectoryChangesW`` on older versions or unsupported file shares.
- [watchmedo] Changed the default ``--patterns`` value from ``"*"`` to ``"**"``, so the default matches absolute paths at any depth under the ``full_match()`` semantics introduced by 1101, and 
updated the CLI help text and docs to the ``**/`` glob syntax.

**Other Changes**

- Add support for Python 3.15
- [core] Add context manager support to ``Observer`` class. The observer can now be used with a ``with`` statement for automatic start/stop management.
- [core] Add support for the ``follow_symlink`` keyword argument to ``ObservedWatch``.
- [core] Added the ``ignore_policy`` argument to ``PatternMatchingEventHandler`` and ``RegexMatchingEventHandler`` to configure multi-path event filtering (moves/renames). 
``PatternMatchingEventHandler`` is now strict by default, aligning with ``RegexMatchingEventHandler``.
- [core] Added the ``watchdog.utils.Seconds`` type alias and used it for the time-duration parameters (``timeout``, ``polling_interval``, ``kill_after``, ...) instead of documenting the unit in each 
docstring. Duration parameters previously hinted as ``int`` now accept ``float``.
- [core] Adjust ``Observer.schedule()`` ``path`` type annotation to reflect the ``pathlib.Path`` support.
- [core] Allow scheduling watches on individual files in ``Observer.schedule()``.
- [core] Call ``task_done()`` for the stop sentinel in ``dispatch_events()`` to prevent ``join()`` from hanging.
- [core] ``case_sensitive=False`` matching now really ignores case on Python ``<`` 3.13. The ``PurePath.full_match()`` fallback compiled its regex without ``re.IGNORECASE``, so only the patterns were 
lower-cased and a path such as ``FOO.PY`` never matched ``**/*.py``.
- [core] ``dispatch_events()`` no longer re-adds a watch that ``unschedule()`` removed, which leaked one ``_handlers`` entry per watch that had an event in flight.
- [core] Do not retain an event handler when ``Observer.schedule()`` fails to create or start its emitter.
- [core] ``EventEmitter`` and ``EventDispatcher`` reject a bool ``timeout``. ``bool`` subclasses ``int``, so ``timeout=True`` was stored and treated as ``1.0`` seconds.
- [core] Fixed ``generate_sub_moved_events()`` corrupting paths when the directory name appears multiple times in the path.
- [core] ``ObservedWatch`` equality now includes ``follow_symlink``, so scheduling a path a second time with a different ``follow_symlink`` value no longer collapses onto the first watch and silently 
drops the request.
- [core] ``RegexMatchingEventHandler`` no longer matches its regexes against an empty destination path for events that are not moves. Since events became dataclasses, ``hasattr(event, "dest_path")`` 
is always true, so a regex matching the empty string (e.g. ``^(?!.*\.pyc$).*$``) let every event through, and such an ignore regex dropped every event. ``PatternMatchingEventHandler`` had the same 
check.
- [core] ``remove_handler_for_watch()`` no longer re-adds a watch that ``unschedule()`` removed, which leaked one empty ``_handlers`` entry per call.
- [core] Add ``win_arm64`` to the list of platform-specific wheels published to PyPI.
- [core] Add ``manylinux_2_17`` to the list of platform-specific wheels published to PyPI.
- [inotify] Add support for the ``follow_symlink`` keyword argument.
- [inotify] Do not suppress registration errors for the requested root path. A missing root now raises ``FileNotFoundError`` from ``observer.start()``, or from ``observer.schedule()`` when already 
running. Recursive descendant failures remain tolerated.
- [inotify] Keep watching newly created subdirectories when recursive watches filter out creation events.
- [inotify] Reduce number of created inotify instance.
- [inotify] Snapshot the watch group before the blocking read in ``InotifyEmitter.queue_events()`` so stopping the emitter cannot raise ``AttributeError`` on a cleared ``self._inotify``.
- [inotify] Do not suppress registration errors for the requested root path. A missing root now raises ``FileNotFoundError`` from ``observer.start()``, or from ``observer.schedule()`` when already 
running. Recursive descendant failures remain tolerated.
- [fsevents] Added the ``latency`` keyword argument to ``FSEventsEmitter`` and ``FSEventsObserver`` (defaulting to ``watchdog.observers.fsevents.DEFAULT_FSEVENTS_LATENCY``), exposing the FSEvents 
stream latency previously hard-coded at 10 ms. Raising it coalesces duplicate events.
- [fsevents] Add support for the ``follow_symlink`` keyword argument.
- [fsevents] Support free-threading and give each emitter its own stream and run loop to prevent shutdown leaks.
- [fsevents] Use multi-phase initialization (PEP 489).
- [windows] A rename whose ``RENAMED_OLD`` and ``RENAMED_NEW`` records arrive in different ``get_events()`` batches no longer emits a move event with an empty ``src_path``.
- [windows] Changing only the case of a name no longer emits a deletion event on top of the move event.
- [windows] Event file names are decoded as UTF-16LE, so a name starting with U+FEFF or U+FFFE no longer reports the wrong path.
- [windows] Fixed an unsynchronized access to ``WindowsApiEmitter._reader``: ``queue_events()`` now
  reads it under the same lock used by ``on_thread_stop()``.
- [windows] Use double-buffering for ``read_directory_changes`` to avoid missed events under high load.
- [polling] A transient ``OSError`` while polling, such as a network share that is briefly unreachable, no longer emits a ``DirDeletedEvent`` for the watched directory and stops the emitter. The 
error is logged and the next poll tries again, so changes made in the meantime are still reported. Only ``FileNotFoundError`` and ``NotADirectoryError`` are still treated as a deletion.
- [polling] Detect permission, ownership, and file attribute modifications in ``DirectorySnapshotDiff`` and emit ``FileAttribEvent`` and ``DirAttribEvent`` in ``PollingObserver``.
- [bsd] Do not let a ``PermissionError`` raised while registering a kevent kill the emitter thread.
- [freebsd] Supports ``inotify`` on FreeBSD 15+.
- [utils] Deduplicate consecutive ``None`` items in ``SkipRepeatsQueue``.
- [utils] Deprecated the ``debounce_interval_seconds`` argument and attribute of ``EventDebouncer`` and ``AutoRestartTrick`` in favour of ``debounce_interval``, and the ``DelayedQueue.delay_sec`` 
attribute in favour of ``delay``. The old names still work but emit a ``DeprecationWarning``.
- [utils] ``DirectorySnapshotDiff(ignore_device=True)`` now detects moved files and directories when the device ID changes between snapshots.
- [utils] Fix ``EventDebouncer`` starvation on high frequency events and ensure pending events are delivered upon stop.
- [utils] Fixed ``DirectorySnapshotDiff`` reporting a newly created symlink as a move of its target (and a removed symlink as a move onto its target), so ``PollingObserver`` now emits a create/delete 
event to match the native observers.
- [utils] Fixed ``repr(EmptyDirectorySnapshot)``, before that it was throwing an ``AttributeError: 'EmptyDirectorySnapshot' object has no attribute '_stat_info'``.
- [utils] Implemented ``len(DirectorySnapshotDiff)`` to return the total number of changes.
- [utils] Make ``SkipRepeatsQueue.put()`` and ``put_nowait()`` reject duplicate items after ``shutdown()`` on Python 3.13+.
- [utils] Serialize ``SkipRepeatsQueue`` producers to prevent consecutive duplicates, respecting blocking and timeout limits while acquiring the producer lock.
- [utils] Use a monotonic clock for ``DelayedQueue`` delays so system clock adjustments do not stall or prematurely release events.
- [utils] Make ``SkipRepeatsQueue.put()`` and ``put_nowait()`` reject duplicate items after ``shutdown()`` on Python 3.13+.
- [utils] Fix ``EventDebouncer`` starvation on high frequency events and ensure pending events are delivered upon stop.
- [tricks] Allow configuring ``shell_executable`` and ``cwd`` for ``ShellCommandTrick`` and ``watchmedo shell-command``.
- [watchmedo] Support running watchmedo via ``python -m watchdog``.
- [watchmedo] The ``AutoRestartTrick`` stop signal is now actually delivered on Windows. The subprocess is started in its own process group and signalled with ``CTRL_BREAK_EVENT``, so it can run 
cleanup handlers and its descendants are no longer orphaned on every restart.
- [watchmedo] ``AutoRestartTrick``'s ``--signal SIGBREAK`` now routes through ``CTRL_BREAK_EVENT`` on Windows too, instead of falling back to the hard kill that skips the child's cleanup handlers.
- [watchmedo] Show file system events by default in ``watchmedo log``.
- [tests] Remove the ``eventlet`` tests and test dependency.
- [docs] Document that ``BaseThread`` always runs as a daemon thread, instead of inheriting ``daemon`` from the creating thread as the inherited ``threading.Thread`` documentation states.
- [docs] ``FileSystemEvent`` no longer claims to be immutable; its fields stay writable and the hash is derived from them, so mutating an event held in a dict or set strands it there.
- [docs] Note that ``FileClosedEvent``, ``FileClosedNoWriteEvent`` and ``FileOpenedEvent``, and their ``on_closed()``, ``on_closed_no_write()`` and ``on_opened()`` handlers, are emitted only by 
``InotifyObserver`` on Linux.


To generate a diff of this commit:
cvs rdiff -u -r1.30 -r1.31 pkgsrc/sysutils/py-watchdog/Makefile
cvs rdiff -u -r1.7 -r1.8 pkgsrc/sysutils/py-watchdog/PLIST
cvs rdiff -u -r1.16 -r1.17 pkgsrc/sysutils/py-watchdog/distinfo

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/sysutils/py-watchdog/Makefile
diff -u pkgsrc/sysutils/py-watchdog/Makefile:1.30 pkgsrc/sysutils/py-watchdog/Makefile:1.31
--- pkgsrc/sysutils/py-watchdog/Makefile:1.30   Fri Oct 16 19:44:14 2026
+++ pkgsrc/sysutils/py-watchdog/Makefile        Mon Nov  2 11:21:10 2026
@@ -1,8 +1,7 @@
-# $NetBSD: Makefile,v 1.30 2026/10/16 19:44:14 adam Exp $
+# $NetBSD: Makefile,v 1.31 2026/11/02 11:21:10 adam Exp $
 
-DISTNAME=      watchdog-6.0.0
+DISTNAME=      watchdog-7.0.0
 PKGNAME=       ${PYPKGPREFIX}-${DISTNAME}
-PKGREVISION=   1
 CATEGORIES=    sysutils python
 MASTER_SITES=  ${MASTER_SITE_PYPI:=w/watchdog/}
 
@@ -14,18 +13,16 @@ LICENSE=    apache-2.0
 TOOL_DEPENDS+= ${PYPKGPREFIX}-setuptools>=78:../../devel/py-setuptools
 # watchmedo
 DEPENDS+=      ${PYPKGPREFIX}-yaml>=3.10:../../textproc/py-yaml
-TEST_DEPENDS+= ${PYPKGPREFIX}-mypy-[0-9]*:../../lang/py-mypy
-TEST_DEPENDS+= ${PYPKGPREFIX}-test-cov-[0-9]*:../../devel/py-test-cov
+TEST_DEPENDS+= ${PYPKGPREFIX}-mypy>=0:../../lang/py-mypy
+TEST_DEPENDS+= ${PYPKGPREFIX}-test-cov>=0:../../devel/py-test-cov
 TEST_DEPENDS+= ${PYPKGPREFIX}-test-timeout>=0.3:../../devel/py-test-timeout
 
+PY_RENAME_BINARIES=    watchmedo
+
 # as of 6.0.0
 # 3 failed, 146 passed, 13 skipped, 21 warnings
 
 PYTHON_VERSIONS_INCOMPATIBLE=  311
 
-post-install:
-       cd ${DESTDIR}${PREFIX}/bin && \
-       ${MV} watchmedo watchmedo-${PYVERSSUFFIX} || ${TRUE}
-
 .include "../../lang/python/wheel.mk"
 .include "../../mk/bsd.pkg.mk"

Index: pkgsrc/sysutils/py-watchdog/PLIST
diff -u pkgsrc/sysutils/py-watchdog/PLIST:1.7 pkgsrc/sysutils/py-watchdog/PLIST:1.8
--- pkgsrc/sysutils/py-watchdog/PLIST:1.7       Sun Apr 13 18:29:16 2025
+++ pkgsrc/sysutils/py-watchdog/PLIST   Mon Nov  2 11:21:10 2026
@@ -1,16 +1,19 @@
-@comment $NetBSD: PLIST,v 1.7 2025/04/13 18:29:16 wiz Exp $
+@comment $NetBSD: PLIST,v 1.8 2026/11/02 11:21:10 adam Exp $
 bin/watchmedo-${PYVERSSUFFIX}
 ${PYSITELIB}/${WHEEL_INFODIR}/METADATA
 ${PYSITELIB}/${WHEEL_INFODIR}/RECORD
 ${PYSITELIB}/${WHEEL_INFODIR}/WHEEL
+${PYSITELIB}/${WHEEL_INFODIR}/entry_points.txt
 ${PYSITELIB}/${WHEEL_INFODIR}/licenses/AUTHORS
 ${PYSITELIB}/${WHEEL_INFODIR}/licenses/COPYING
 ${PYSITELIB}/${WHEEL_INFODIR}/licenses/LICENSE
-${PYSITELIB}/${WHEEL_INFODIR}/entry_points.txt
 ${PYSITELIB}/${WHEEL_INFODIR}/top_level.txt
 ${PYSITELIB}/watchdog/__init__.py
 ${PYSITELIB}/watchdog/__init__.pyc
 ${PYSITELIB}/watchdog/__init__.pyo
+${PYSITELIB}/watchdog/__main__.py
+${PYSITELIB}/watchdog/__main__.pyc
+${PYSITELIB}/watchdog/__main__.pyo
 ${PYSITELIB}/watchdog/events.py
 ${PYSITELIB}/watchdog/events.pyc
 ${PYSITELIB}/watchdog/events.pyo
@@ -29,12 +32,12 @@ ${PYSITELIB}/watchdog/observers/fsevents
 ${PYSITELIB}/watchdog/observers/inotify.py
 ${PYSITELIB}/watchdog/observers/inotify.pyc
 ${PYSITELIB}/watchdog/observers/inotify.pyo
-${PYSITELIB}/watchdog/observers/inotify_buffer.py
-${PYSITELIB}/watchdog/observers/inotify_buffer.pyc
-${PYSITELIB}/watchdog/observers/inotify_buffer.pyo
 ${PYSITELIB}/watchdog/observers/inotify_c.py
 ${PYSITELIB}/watchdog/observers/inotify_c.pyc
 ${PYSITELIB}/watchdog/observers/inotify_c.pyo
+${PYSITELIB}/watchdog/observers/inotify_move_event_grouper.py
+${PYSITELIB}/watchdog/observers/inotify_move_event_grouper.pyc
+${PYSITELIB}/watchdog/observers/inotify_move_event_grouper.pyo
 ${PYSITELIB}/watchdog/observers/kqueue.py
 ${PYSITELIB}/watchdog/observers/kqueue.pyc
 ${PYSITELIB}/watchdog/observers/kqueue.pyo
@@ -54,6 +57,9 @@ ${PYSITELIB}/watchdog/tricks/__init__.py
 ${PYSITELIB}/watchdog/utils/__init__.py
 ${PYSITELIB}/watchdog/utils/__init__.pyc
 ${PYSITELIB}/watchdog/utils/__init__.pyo
+${PYSITELIB}/watchdog/utils/backwards_compat.py
+${PYSITELIB}/watchdog/utils/backwards_compat.pyc
+${PYSITELIB}/watchdog/utils/backwards_compat.pyo
 ${PYSITELIB}/watchdog/utils/bricks.py
 ${PYSITELIB}/watchdog/utils/bricks.pyc
 ${PYSITELIB}/watchdog/utils/bricks.pyo

Index: pkgsrc/sysutils/py-watchdog/distinfo
diff -u pkgsrc/sysutils/py-watchdog/distinfo:1.16 pkgsrc/sysutils/py-watchdog/distinfo:1.17
--- pkgsrc/sysutils/py-watchdog/distinfo:1.16   Mon Nov  4 18:17:06 2024
+++ pkgsrc/sysutils/py-watchdog/distinfo        Mon Nov  2 11:21:10 2026
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.16 2024/11/04 18:17:06 wiz Exp $
+$NetBSD: distinfo,v 1.17 2026/11/02 11:21:10 adam Exp $
 
-BLAKE2s (watchdog-6.0.0.tar.gz) = 53f01b5f294ed50b93ecd944db9ba435cfd862aad7124bb3c527614abfd9f41b
-SHA512 (watchdog-6.0.0.tar.gz) = a248e05b538a894a00e38dabbc0cc7490bb1a87689aa14aac5835f611136fcf6f1e3bd45a6ca4f10991ffabd9264c72f981f4619bd77eb8baf297d015975d57f
-Size (watchdog-6.0.0.tar.gz) = 131220 bytes
+BLAKE2s (watchdog-7.0.0.tar.gz) = 072ef1d27b905861e2099c7aab837dbcf8eb93c69e46c6442b459803a4583e84
+SHA512 (watchdog-7.0.0.tar.gz) = c73cec75556a25b5d73a03c2c0eeb4ded07bcf80bc196d1dc345bfa1544f8be467c4ada562e65a48d15b95a8997108a8103ff92de3d9edb8b320217933c8e05f
+Size (watchdog-7.0.0.tar.gz) = 208550 bytes



Home | Main Index | Thread Index | Old Index