Skip to content

build(deps-dev): bump watchdog from 6.0.0 to 7.0.0 - #1924

Merged
collerek merged 2 commits into
masterfrom
dependabot/pip/watchdog-7.0.0
Nov 4, 2026
Merged

collerek merged 2 commits into
masterfrom
dependabot/pip/watchdog-7.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Bumps watchdog from 6.0.0 to 7.0.0.

Release notes

Sourced from watchdog's releases.

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. (#1101)
  • [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. (#260)
  • [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. (#1212)

Other Changes

  • Add support for Python 3.15 (#1226)
  • [core] Add context manager support to Observer class. The observer can now be used with a with statement for automatic start/stop management. (#1090)
  • [core] Add support for the follow_symlink keyword argument to ObservedWatch. (#1086)
  • [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. (#412, #423)
  • [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. (#1096)
  • [core] Allow scheduling watches on individual files in Observer.schedule(). (#1034)
  • [core] Call task_done() for the stop sentinel in dispatch_events() to prevent join() from hanging. (#1159)
  • [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. (#1263)
  • [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. (#1261)
  • [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. (#1287)
  • [core] Fixed generate_sub_moved_events() corrupting paths when the directory name appears multiple times in the path. (#1158)
  • [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. (#1262)
  • [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. (#1285)
  • [core] Add win_arm64 to the list of platform-specific wheels published to PyPI. (#1137)
  • [core] Add manylinux_2_17 to the list of platform-specific wheels published to PyPI. (#1125)
  • [inotify] Add support for the follow_symlink keyword argument. (#1086)
  • [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. (#1157)
  • [inotify] Keep watching newly created subdirectories when recursive watches filter out creation events. (#990)
  • [inotify] Reduce number of created inotify instance. (#1099)
  • [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.
  • [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. (#835)
  • [fsevents] Add support for the follow_symlink keyword argument. (#1086)
  • [fsevents] Support free-threading and give each emitter its own stream and run loop to prevent shutdown leaks. (#1140)
  • [fsevents] Use multi-phase initialization (PEP 489). (#1108)
  • [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. (#1286)
  • [windows] Changing only the case of a name no longer emits a deletion event on top of the move event. (#752)
  • [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. (#1228)
  • [windows] Fixed an unsynchronized access to WindowsApiEmitter._reader: queue_events() now reads it under the same lock used by on_thread_stop(). (#1170)
  • [windows] Use double-buffering for read_directory_changes to avoid missed events under high load. (#1152)
  • [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. (#1065)
  • [polling] Detect permission, ownership, and file attribute modifications in DirectorySnapshotDiff and emit FileAttribEvent and DirAttribEvent in PollingObserver. (#881)
  • [bsd] Do not let a PermissionError raised while registering a kevent kill the emitter thread. (#1115)
  • [freebsd] Supports inotify on FreeBSD 15+. (#1147)
  • [utils] Deduplicate consecutive None items in SkipRepeatsQueue. (#1348)
  • [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.

... (truncated)

Changelog

Sourced from watchdog's changelog.

7.0.0


2026-10-31 • `full history <https://github.com/gorakhargosh/watchdog/compare/v6.0.0...v7.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. ([#1101](https://github.com/gorakhargosh/watchdog/issues/1101) &lt;https://github.com/gorakhargosh/watchdog/pull/1101&gt;__)
  • [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. ([#260](https://github.com/gorakhargosh/watchdog/issues/260) &lt;https://github.com/gorakhargosh/watchdog/issues/260&gt;__)
  • [watchmedo] Changed the default --patterns value from &quot;*&quot; to &quot;**&quot;, 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. ([#1212](https://github.com/gorakhargosh/watchdog/issues/1212) &lt;https://github.com/gorakhargosh/watchdog/issues/1212&gt;__)

Other Changes

  • Add support for Python 3.15 ([#1226](https://github.com/gorakhargosh/watchdog/issues/1226) &lt;https://github.com/gorakhargosh/watchdog/issues/1226&gt;__)
  • [core] Add context manager support to Observer class. The observer can now be used with a with statement for automatic start/stop management. ([#1090](https://github.com/gorakhargosh/watchdog/issues/1090) &lt;https://github.com/gorakhargosh/watchdog/pull/1149&gt;__)
  • [core] Add support for the follow_symlink keyword argument to ObservedWatch. ([#1086](https://github.com/gorakhargosh/watchdog/issues/1086) &lt;https://github.com/gorakhargosh/watchdog/pull/1086&gt;__)
  • [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. ([#412](https://github.com/gorakhargosh/watchdog/issues/412) &lt;https://github.com/gorakhargosh/watchdog/issues/412&gt;, [#423](https://github.com/gorakhargosh/watchdog/issues/423) &lt;https://github.com/gorakhargosh/watchdog/issues/423&gt;)
  • [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. ([#1096](https://github.com/gorakhargosh/watchdog/issues/1096) &lt;https://github.com/gorakhargosh/watchdog/pull/1096&gt;__)
  • [core] Allow scheduling watches on individual files in Observer.schedule(). ([#1034](https://github.com/gorakhargosh/watchdog/issues/1034) &lt;https://github.com/gorakhargosh/watchdog/issues/1034&gt;__)
  • [core] Call task_done() for the stop sentinel in dispatch_events() to prevent join() from hanging. ([#1159](https://github.com/gorakhargosh/watchdog/issues/1159) &lt;https://github.com/gorakhargosh/watchdog/pull/1159&gt;__)
  • [core] case_sensitive=False matching now really ignores case on Python &lt; 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. ([#1263](https://github.com/gorakhargosh/watchdog/issues/1263) &lt;https://github.com/gorakhargosh/watchdog/pull/1263&gt;__)
  • [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. ([#1261](https://github.com/gorakhargosh/watchdog/issues/1261) &lt;https://github.com/gorakhargosh/watchdog/pull/1261&gt;__)
  • [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. ([#1287](https://github.com/gorakhargosh/watchdog/issues/1287) &lt;https://github.com/gorakhargosh/watchdog/pull/1287&gt;__)
  • [core] Fixed generate_sub_moved_events() corrupting paths when the directory name appears multiple times in the path. ([#1158](https://github.com/gorakhargosh/watchdog/issues/1158) &lt;https://github.com/gorakhargosh/watchdog/pull/1158&gt;__)
  • [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. ([#1262](https://github.com/gorakhargosh/watchdog/issues/1262) &lt;https://github.com/gorakhargosh/watchdog/pull/1262&gt;__)
  • [core] RegexMatchingEventHandler no longer matches its regexes against an empty destination path for events that are not moves. Since events became dataclasses, hasattr(event, &quot;dest_path&quot;) 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. ([#1285](https://github.com/gorakhargosh/watchdog/issues/1285) &lt;https://github.com/gorakhargosh/watchdog/pull/1285&gt;__)
  • [core] Add win_arm64 to the list of platform-specific wheels published to PyPI. ([#1137](https://github.com/gorakhargosh/watchdog/issues/1137) &lt;https://github.com/gorakhargosh/watchdog/issues/1137&gt;__)
  • [core] Add manylinux_2_17 to the list of platform-specific wheels published to PyPI. ([#1125](https://github.com/gorakhargosh/watchdog/issues/1125) &lt;https://github.com/gorakhargosh/watchdog/issues/1125&gt;__)
  • [inotify] Add support for the follow_symlink keyword argument. ([#1086](https://github.com/gorakhargosh/watchdog/issues/1086) &lt;https://github.com/gorakhargosh/watchdog/pull/1086&gt;__)
  • [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. ([#1157](https://github.com/gorakhargosh/watchdog/issues/1157) &lt;https://github.com/gorakhargosh/watchdog/issues/1157&gt;__)
  • [inotify] Keep watching newly created subdirectories when recursive watches filter out creation events. ([#990](https://github.com/gorakhargosh/watchdog/issues/990) &lt;https://github.com/gorakhargosh/watchdog/issues/990&gt;__)
  • [inotify] Reduce number of created inotify instance. ([#1099](https://github.com/gorakhargosh/watchdog/issues/1099) &lt;https://github.com/gorakhargosh/watchdog/pull/1099&gt;__)
  • [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.
  • [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. ([#835](https://github.com/gorakhargosh/watchdog/issues/835) &lt;https://github.com/gorakhargosh/watchdog/issues/835&gt;__)
  • [fsevents] Add support for the follow_symlink keyword argument. ([#1086](https://github.com/gorakhargosh/watchdog/issues/1086) &lt;https://github.com/gorakhargosh/watchdog/pull/1086&gt;__)
  • [fsevents] Support free-threading and give each emitter its own stream and run loop to prevent shutdown leaks. ([#1140](https://github.com/gorakhargosh/watchdog/issues/1140) &lt;https://github.com/gorakhargosh/watchdog/issues/1140&gt;__)
  • [fsevents] Use multi-phase initialization (PEP 489). ([#1108](https://github.com/gorakhargosh/watchdog/issues/1108) &lt;https://github.com/gorakhargosh/watchdog/issues/1108&gt;__)
  • [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. ([#1286](https://github.com/gorakhargosh/watchdog/issues/1286) &lt;https://github.com/gorakhargosh/watchdog/pull/1286&gt;__)
  • [windows] Changing only the case of a name no longer emits a deletion event on top of the move event. ([#752](https://github.com/gorakhargosh/watchdog/issues/752) &lt;https://github.com/gorakhargosh/watchdog/issues/752&gt;__)
  • [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. ([#1228](https://github.com/gorakhargosh/watchdog/issues/1228) &lt;https://github.com/gorakhargosh/watchdog/pull/1228&gt;__)
  • [windows] Fixed an unsynchronized access to WindowsApiEmitter._reader: queue_events() now reads it under the same lock used by on_thread_stop(). ([#1170](https://github.com/gorakhargosh/watchdog/issues/1170) &lt;https://github.com/gorakhargosh/watchdog/issues/1170&gt;__)
  • [windows] Use double-buffering for read_directory_changes to avoid missed events under high load. ([#1152](https://github.com/gorakhargosh/watchdog/issues/1152) &lt;https://github.com/gorakhargosh/watchdog/pull/1152&gt;__)
  • [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. ([#1065](https://github.com/gorakhargosh/watchdog/issues/1065) &lt;https://github.com/gorakhargosh/watchdog/issues/1065&gt;__)
  • [polling] Detect permission, ownership, and file attribute modifications in DirectorySnapshotDiff and emit FileAttribEvent and DirAttribEvent in PollingObserver. ([#881](https://github.com/gorakhargosh/watchdog/issues/881) &lt;https://github.com/gorakhargosh/watchdog/issues/881&gt;__)
  • [bsd] Do not let a PermissionError raised while registering a kevent kill the emitter thread. ([#1115](https://github.com/gorakhargosh/watchdog/issues/1115) &lt;https://github.com/gorakhargosh/watchdog/issues/1115&gt;__) </tr></table>

... (truncated)

Commits

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python Pull requests that update Python code labels Nov 4, 2026
@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@dependabot
dependabot Bot force-pushed the dependabot/pip/watchdog-7.0.0 branch from 94107c3 to 58e192d Compare November 4, 2026 02:32
Bumps [watchdog](https://github.com/gorakhargosh/watchdog) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/gorakhargosh/watchdog/releases)
- [Changelog](https://github.com/gorakhargosh/watchdog/blob/master/changelog.rst)
- [Commits](gorakhargosh/watchdog@v6.0.0...v7.0.0)

---
updated-dependencies:
- dependency-name: watchdog
  dependency-version: 7.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot
dependabot Bot force-pushed the dependabot/pip/watchdog-7.0.0 branch from 58e192d to e4ca20d Compare November 4, 2026 02:40
@collerek
collerek merged commit 11d3244 into master Nov 4, 2026
11 checks passed
@dependabot
dependabot Bot deleted the dependabot/pip/watchdog-7.0.0 branch November 4, 2026 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python Pull requests that update Python code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants