Watchdog
Python API and shell utilities to monitor file system events.
Browse the documentation online.
Works on 3.11+.
Example API Usage
A simple program that uses watchdog to monitor directories specified as command-line arguments and logs events generated:
import sys
import time
from watchdog.events import FileSystemEvent, FileSystemEventHandler
from watchdog.observers import Observer
class MyEventHandler(FileSystemEventHandler):
def on_any_event(self, event: FileSystemEvent) -> None:
print(event)
event_handler = MyEventHandler()
observer = Observer()
paths = sys.argv[1:] if len(sys.argv) > 1 else ["."]
for path in paths:
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
finally:
observer.stop()
observer.join()
Alternatively, you can use the observer as a context manager for cleaner code:
import sys
import time
from watchdog.events import FileSystemEvent, FileSystemEventHandler
from watchdog.observers import Observer
class MyEventHandler(FileSystemEventHandler):
def on_any_event(self, event: FileSystemEvent) -> None:
print(event)
event_handler = MyEventHandler()
observer = Observer()
paths = sys.argv[1:] if len(sys.argv) > 1 else ["."]
for path in paths:
observer.schedule(event_handler, path, recursive=True)
with observer:
while True:
time.sleep(1)
To run the script, pass the directories you want to monitor as command-line arguments (defaults to the current directory if omitted):
python script.py dir1 dir2
Shell Utilities
Watchdog comes with an optional utility script called watchmedo. Please type watchmedo --help at the shell prompt to know more about this tool.
Here is how you can log the current directory recursively for events related only to *.py and *.txt files while ignoring all directory events:
watchmedo log \
--patterns='**/*.py;**/*.txt' \
--ignore-directories \
--recursive \
--verbose \
.
You can use the shell-command subcommand to execute shell commands in response to events:
watchmedo shell-command \
--patterns='**/*.py;**/*.txt' \
--recursive \
--command='echo "${watch_src_path}"' \
.
Please see the help information for these commands by typing:
watchmedo [command] --help
About watchmedo Tricks
watchmedo can read tricks.yaml files and execute tricks within them in response to file system events. Tricks are actually event handlers that subclass watchdog.tricks.Trick and are written by plugin authors. Trick classes are augmented with a few additional features that regular event handlers don’t need.
An example tricks.yaml file:
tricks:
- watchdog.tricks.LoggerTrick:
patterns: ["**/*.py", "**/*.js"]
- watchmedo_webtricks.GoogleClosureTrick:
patterns: ['**/*.js']
hash_names: true
mappings_format: json # json|yaml|python
mappings_module: app/javascript_mappings
suffix: .min.js
compilation_level: advanced # simple|advanced
source_directory: app/static/js/
destination_directory: app/public/js/
files:
index-page:
- app/static/js/vendor/jquery*.js
- app/static/js/base.js
- app/static/js/index-page.js
about-page:
- app/static/js/vendor/jquery*.js
- app/static/js/base.js
- app/static/js/about-page/**/*.js
The directory containing the tricks.yaml file will be monitored. Each trick class is initialized with its corresponding keys in the tricks.yaml file as arguments and events are fed to an instance of this class as they arrive.
Installation
Install from PyPI using pip:
$ python -m pip install -U watchdog
# or to install the watchmedo utility:
$ python -m pip install -U 'watchdog[watchmedo]'
Install from source:
$ python -m pip install -e .
# or to install the watchmedo utility:
$ python -m pip install -e '.[watchmedo]'
Documentation
You can browse the latest release documentation online.
Contribute
Fork the repository on GitHub and send a pull request, or file an issue ticket at the issue tracker. For general help and questions use stackoverflow with tag python-watchdog.
Create and activate your virtual environment, then:
python -m pip install tox python -m tox [-q] [-e ENV]
If you are making a substantial change, add an entry to the “Unreleased” section of the changelog.
Supported Platforms
Linux 2.6 (inotify)
macOS (FSEvents, kqueue)
FreeBSD/BSD (kqueue)
Windows (ReadDirectoryChangesW with I/O completion ports; ReadDirectoryChangesW worker threads)
OS-independent (polling the disk for directory snapshots and comparing them periodically; slow and not recommended)
Note that when using watchdog with kqueue, you need the number of file descriptors allowed to be opened by programs running on your system to be increased to more than the number of files that you will be monitoring. The easiest way to do that is to edit your ~/.profile file and add a line similar to:
ulimit -n 1024
or:
ulimit -n unlimited
This is an inherent problem with kqueue because it uses file descriptors to monitor files. That plus the enormous amount of bookkeeping that watchdog needs to do in order to monitor file descriptors just makes this a painful way to monitor files and directories. In essence, kqueue is not a very scalable way to monitor a deeply nested directory of files and directories with a large number of files.
Free threaded support
watchdog has support for being built and run under free-threaded CPython. However, a full thread safety audit has not been completed, in particular this affects the macOS FSEvents interface.
About using watchdog with editors like Vim
Vim does not modify files unless directed to do so. It creates backup files and then swaps them in to replace the files you are editing on the disk. This means that if you use Vim to edit your files, the on-modified events for those files will not be triggered by watchdog. You may need to configure Vim appropriately to disable this feature.
About using watchdog with CIFS
When you want to watch changes in CIFS, you need to explicitly tell watchdog to use PollingObserver, that is, instead of letting watchdog decide an appropriate observer like in the example above, do:
from watchdog.observers.polling import PollingObserver as Observer
Dependencies
Applications Using Watchdog
Watchdog.app — A macOS application for monitoring file changes in selected directories. Built with the OMC engine, it provides a graphical interface for observing directories. The Apple-notarized app is read to use and does not require additional installations.
Licensing
Watchdog is licensed under the terms of the Apache License, version 2.0.
Copyright 2018-2026 Mickaël Schoentgen & contributors
Copyright 2014-2018 Thomas Amland & contributors
Copyright 2012-2014 Google, Inc.
Copyright 2011-2012 Yesudeep Mangalapilly
Project source code is available at Github. Please report bugs and file enhancement requests at the issue tracker.
Why Watchdog?
Too many people tried to do the same thing and none did what I needed Python to do:
Changelog
7.0.0
2026-10-31 • full history
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.
[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)
[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.
[utils] Fix EventDebouncer starvation on high frequency events and ensure pending events are delivered upon stop. (#998)
[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. (#1176)
[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. (#1338)
[utils] Use a monotonic clock for DelayedQueue delays so system clock adjustments do not stall or prematurely release events. (#1296)
[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. (#998)
[tricks] Allow configuring shell_executable and cwd for ShellCommandTrick and watchmedo shell-command. (#921)
[watchmedo] Support running watchmedo via python -m watchdog. (#1162)
[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. (#1221)
[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. (#1221)
[watchmedo] Show file system events by default in watchmedo log. (#913)
[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. (#1117)
[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. (#1240)
[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. (#1235)
Thanks to our beloved contributors: @BoboTiG, @Corentin-pro, @Liam-DeVoe, @kirkhansen, @JoachimCoenen, @HaoZeke, @LincolnPuzey, @adicohen1005, @zastrowm, @ngoldbaum, @QWERTIOX, @cclauss, @blitztide, @nascheme, @Prosperibe12, @bysiber, @abra-code, @toroleapinc, @maxtaran2010, @gorakhargosh, @Sanjays2402, @prateek-dagar, @BortnikMaxim, @MohammedAlkindi, @Skeletor-Pirate, @btschwertfeger, @zain-asif-dev, @subikshajegadish, @FanWu-ai, @ryanchou1994, @Rosuav, @TobiasRzepka, @GreatBahram, @arindamsikder, @apoorvdarshan, @kokotatan, @Om-singhaI, @amprew, @Pitchfork-and-Torch, @Dev-iL, @CLCK0622, @Enesuygurs, @galafis, @vaibhav8a, @ivg, @newchannelid432-code, @Aschenbath, @Joelbit-io, @Alex0AI
6.0.0
2024-11-01 • full history
Pin test dependencies.
[docs] Add typing info to quick start. (#1082)
[inotify] Use of select.poll() instead of deprecated select.select(), if available. (#1078)
[inotify] Fix reading inotify file descriptor after closing it. (#1081)
[utils] The stop_signal keyword-argument type of the AutoRestartTrick class can now be either a signal.Signals or an int.
[utils] Added the __repr__() method to the Trick class.
[utils] Removed the unused echo_class() function from the echo module.
[utils] Removed the unused echo_instancemethod() function from the echo module.
[utils] Removed the unused echo_module() function from the echo module.
[utils] Removed the unused is_class_private_name() function from the echo module.
[utils] Removed the unused is_classmethod() function from the echo module.
[utils] Removed the unused ic_method(met() function from the echo module.
[utils] Removed the unused method_name() function from the echo module.
[utils] Removed the unused name() function from the echo module.
[watchmedo] Fixed Mypy issues.
[watchmedo] Added the __repr__() method to the HelpFormatter class.
[watchmedo] Removed the --trace CLI argument from the watchmedo log command, useless since events are logged by default at the LoggerTrick class level.
[windows] Fixed Mypy issues.
Thanks to our beloved contributors: @BoboTiG, @g-pichler, @ethan-vanderheijden, @nhairs
5.0.3
2024-09-27 • full history
[inotify] Improve cleaning up Inotify threads, and add eventlet test cases (#1070)
Thanks to our beloved contributors: @BoboTiG, @ethan-vanderheijden
5.0.2
2024-09-03 • full history
5.0.1
2024-09-02 • full history
[kqueue] Fix TypeError: kqueue.control() only accepts positional parameters (#1062)
Thanks to our beloved contributors: @apoirier, @BoboTiG
5.0.0
2024-08-26 • full history
Breaking Changes
Drop support for Python 3.8 (#1055)
[core] Enforced usage of proper keyword-arguments (#1057)
[core] Renamed the BaseObserverSubclassCallable class to ObserverType (#1055)
[inotify] Renamed the inotify_event_struct class to InotifyEventStruct (#1055)
[inotify] Renamed the UnsupportedLibc exception to UnsupportedLibcError (#1057)
[inotify] Removed the InotifyConstants.IN_CLOSE constant (#1046)
[watchmedo] Renamed the LogLevelException exception to LogLevelError (#1057)
[watchmedo] Renamed the WatchdogShutdown exception to WatchdogShutdownError (#1057)
[windows] Renamed the FILE_NOTIFY_INFORMATION class to FileNotifyInformation (#1055)
[windows] Removed the unused WATCHDOG_TRAVERSE_MOVED_DIR_DELAY constant (#1057)
Other Changes
[core] Enable disallow_untyped_calls Mypy rule (#1055)
[core] Enable disallow_untyped_defs Mypy rule (#1060)
[core] Improve typing references for events (#1040)
[inotify] Add support for IN_CLOSE_NOWRITE events. A FileClosedNoWriteEvent event will be fired, and its on_closed_no_write() dispatcher has been introduced (#1046)
Thanks to our beloved contributors: @BoboTiG
4.0.2
2024-08-11 • full history
Add support for Python 3.13 (#1052)
[core] Run ruff, apply several fixes (#1033)
[core] Remove execution rights from events.py
[documentation] Update PatternMatchingEventHandler docstrings (#1048)
[documentation] Simplify the quickstart example (#1047)
[fsevents] Add missing event_filter keyword-argument to FSEventsObserver.schedule() (#1049)
[utils] Fix a possible race condition in AutoRestartTrick (#1002)
[watchmedo] Remove execution rights from watchmedo.py
Thanks to our beloved contributors: @BoboTiG, @nbelakovski, @ivg
4.0.1
2024-05-23 • full history
[inotify] Fix missing event_filter for the full emitter (#1032)
Thanks to our beloved contributors: @mraspaud, @BoboTiG
4.0.0
2024-02-06 • full history
Drop support for Python 3.7.
Add support for Python 3.12.
[snapshot] Add typing to dirsnapshot (#1012)
[snapshot] Added DirectorySnapshotDiff.ContextManager (#1011)
[events] FileSystemEvent, and subclasses, are now dataclass``es, and their ``repr() has changed
[windows] WinAPINativeEvent is now a dataclass, and its repr() has changed
[events] Log FileOpenedEvent, and FileClosedEvent, events in LoggingEventHandler
[tests] Improve FileSystemEvent coverage
[watchmedo] Log all events in LoggerTrick
[windows] The observers.read_directory_changes.WATCHDOG_TRAVERSE_MOVED_DIR_DELAY hack was removed. The constant will be kept to prevent breaking other software.
Thanks to our beloved contributors: @BoboTiG, @msabramo
3.0.0
2023-03-20 • full history
Drop support for Python 3.6.
watchdog is now PEP 561 compatible, and tested with mypy
Fix missing > in FileSystemEvent.__repr__() (#980)
[ci] Lots of improvements
[inotify] Return from InotifyEmitter.queue_events() if not launched when thread is inactive (#963)
[tests] Stability improvements
[utils] Remove handling of threading.Event.isSet spelling (#962)
[watchmedo] Fixed tricks YAML generation (#965)
Thanks to our beloved contributors: @kurtmckee, @altendky, @agroszer, @BoboTiG
2.3.1
2023-02-28 • full history
Run black on the entire source code
Bundle the requirements-tests.txt file in the source distribution (#939)
[watchmedo] Exclude FileOpenedEvent events from AutoRestartTrick, and ShellCommandTrick, to restore watchdog < 2.3.0 behavior. A better solution should be found in the future. (#949)
[watchmedo] Log FileOpenedEvent, and FileClosedEvent, events in LoggerTrick
Thanks to our beloved contributors: @BoboTiG
2.3.0
2023-02-23 • full history
[inotify] Add support for IN_OPEN events: a FileOpenedEvent event will be fired (#941)
[watchmedo] Add optional event debouncing for auto-restart, only restarting once if many events happen in quick succession (--debounce-interval) (#940)
[watchmedo] Exit gracefully on KeyboardInterrupt exception (Ctrl+C) (#945)
[watchmedo] Add option to not auto-restart the command after it exits (--no-restart-on-command-exit) (#946)
Thanks to our beloved contributors: @BoboTiG, @dstaple, @taleinat, @cernekj
2.2.1
2023-01-01 • full history
Enable mypy to discover type hints as specified in PEP 561 (#933)
[ci] Set the expected Python version when building release files
[ci] Update actions versions in use
[watchmedo] [regression] Fix usage of missing signal.SIGHUP attribute on non-Unix OSes (#935)
Thanks to our beloved contributors: @BoboTiG, @simon04, @piotrpdev
2.2.0
2022-12-05 • full history
[build] Wheels are now available for Python 3.11 (#932)
[documentation] HTML documentation builds are now tested for errors (#902)
[documentation] Fix typos here, and there (#910)
[fsevents2] The fsevents2 observer is now deprecated (#909)
[tests] The error message returned by musl libc for error code -1 is now allowed (#923)
[utils] Remove unnecessary code in dirsnapshot.py (#930)
[watchmedo] Handle shutdown events from SIGHUP (#912)
Thanks to our beloved contributors: @kurtmckee, @babymastodon, @QuantumEnergyE, @timgates42, @BoboTiG
2.1.9
2022-06-10 • full history
[fsevents] Fix flakey test to assert that there are no errors when stopping the emitter.
[inotify] Suppress occasional OSError: [Errno 9] Bad file descriptor at shutdown. (#805)
[watchmedo] Make auto-restart restart the sub-process if it terminates. (#896)
[watchmedo] Avoid zombie sub-processes when running shell-command without --wait. (#405)
Thanks to our beloved contributors: @samschott, @taleinat, @altendky, @BoboTiG
2.1.8
2022-05-15 • full history
Fix adding failed emitters on observer schedule. (#872)
[inotify] Fix hang when unscheduling watch on a path in an unmounted filesystem. (#869)
[watchmedo] Fix broken parsing of --kill-after argument for the auto-restart command. (#870)
[watchmedo] Fix broken parsing of boolean arguments. (#887)
[watchmedo] Fix broken parsing of commands from auto-restart, and shell-command. (#888)
[watchmedo] Support setting verbosity level via -q/--quiet and -v/--verbose arguments. (#889)
Thanks to our beloved contributors: @taleinat, @kianmeng, @palfrey, @IlayRosenberg, @BoboTiG
2.1.7
2022-03-25 • full history
Eliminate timeout in waiting on event queue. (#861)
[inotify] Fix not equality implementation for InotifyEvent. (#848)
[watchmedo] Fix calling commands from within a Python script. (#879)
[watchmedo] PyYAML is loaded only when strictly necessary. Simple usages of watchmedo are possible without the module being installed. (#847)
Thanks to our beloved contributors: @sattlerc, @JanzenLiu, @BoboTiG
2.1.6
2021-10-01 • full history
[bsd] Fixed returned paths in kqueue.py and restored the overall results of the test suite. (#842)
[bsd] Updated FreeBSD CI support .(#841)
[watchmedo] Removed the argh dependency in favor of the builtin argparse module. (#836)
[watchmedo] Removed unexistant WindowsApiAsyncObserver references and --debug-force-winapi-async arguments.
[watchmedo] Improved the help output.
Thanks to our beloved contributors: @knobix, @AndreaRe9, @BoboTiG
2.1.5
2021-08-23 • full history
2.1.4
2021-08-19 • full history
[watchmedo] Fix usage of os.setsid() and os.killpg() Unix-only functions. (#809)
[mac] Fix missing FileModifiedEvent on permission or ownership changes of a file. (#815)
[mac] Convert absolute watch path in FSEeventsEmitter with os.path.realpath(). (#822)
Fix a possible AttributeError in SkipRepeatsQueue._put(). (#818)
Allow overriding or adding custom event handlers to event dispatch map. (#814)
Fix tests on big endian platforms. (#828)
Thanks to our beloved contributors: @replabrobin, @BoboTiG, @SamSchott, @AndreiB97, @NiklasRosenstein, @ikokollari, @mgorny
2.1.3
2021-06-26 • full history
Publish macOS arm64 and universal2 wheels. (#740)
Thanks to our beloved contributors: @kainjow, @BoboTiG
2.1.2
2021-05-19 • full history
2.1.1
2021-05-10 • full history
[mac] Fix callback exceptions when the watcher is deleted but still receiving events (#786)
Thanks to our beloved contributors: @rom1win, @BoboTiG, @CCP-Aporia
2.1.0
2021-05-04 • full history
2.0.3
2021-04-22 • full history
2.0.2
2021-02-22 • full history
[mac] Add missing exception objects (#766)
Thanks to our beloved contributors: @CCP-Aporia, @BoboTiG
2.0.1
2021-02-17 • full history
2.0.0
2021-02-11 • full history
Avoid deprecated PyEval_InitThreads on Python 3.7+ (#746)
[inotify] Add support for IN_CLOSE_WRITE events. A FileCloseEvent event will be fired. Note that IN_CLOSE_NOWRITE events are not handled to prevent much noise. (#184, #245, #280, #313, #690)
[inotify] Allow to stop the emitter multiple times (#760)
[mac] Support coalesced filesystem events (#734)
[mac] Drop support for macOS 10.12 and earlier (#750)
[mac] Fix an issue when renaming an item changes only the casing (#750)
Thanks to our beloved contributors: @bstaletic, @lukassup, @ysard, @SamSchott, @CCP-Aporia, @BoboTiG
1.0.2
2020-12-18 • full history
Wheels are published for GNU/Linux, macOS and Windows (#739)
[mac] Fix missing event_id attribute in fsevents (#721)
[mac] Return byte paths if a byte path was given in fsevents (#726)
[mac] Add compatibility with old macOS versions (#733)
Uniformize event for deletion of watched dir (#727)
Thanks to our beloved contributors: @SamSchott, @CCP-Aporia, @di, @BoboTiG
1.0.1
2020-12-10 • Fix version with good metadatas.
1.0.0
2020-12-10 • full history
Versioning is now following the semver
Drop support for Python 2.7, 3.4 and 3.5
[mac] Regression fixes for native fsevents (#717)
[windows] winapi.BUFFER_SIZE now defaults to 64000 (instead of 2048) (#700)
[windows] Introduced winapi.PATH_BUFFER_SIZE (defaults to 2048) to keep the old behavior with path-realted functions (#700)
Use pathlib from the standard library, instead of pathtools (#556)
Allow file paths on Unix that don’t follow the file system encoding (#703)
Removed the long-time deprecated events.LoggingFileSystemEventHandler class, use LoggingEventHandler instead
Thanks to our beloved contributors: @SamSchott, @bstaletic, @BoboTiG, @CCP-Aporia
0.10.4
2020-11-21 • full history
Add logger parameter for the LoggingEventHandler (#676)
Replace mutable default arguments with if None implementation (#677)
Expand tests to Python 2.7 and 3.5-3.10 for GNU/Linux, macOS and Windows
[mac] Performance improvements for the fsevents module (#680)
[mac] Prevent compilation of watchdog_fsevents.c on non-macOS machines (#687)
[watchmedo] Handle shutdown events from SIGTERM and SIGINT more reliably (#693)
Thanks to our beloved contributors: @Sraw, @CCP-Aporia, @BoboTiG, @maybe-sybr
0.10.3
2020-06-25 • full history
0.10.2
2020-02-08 • full history
Fixed the build_ext command on macOS Catalina (#628)
Fixed the installation of macOS requirements on non-macOS OSes (#635)
Refactored dispatch() method of FileSystemEventHandler, PatternMatchingEventHandler and RegexMatchingEventHandler
[bsd] Improved tests support on non Windows/Linux platforms (#633, #639)
[bsd] Added FreeBSD CI support (#532)
Thanks to our beloved contributors: @BoboTiG, @evilham, @danilobellini
0.10.1
2020-01-30 • full history
Fixed Python 2.7 to 3.6 installation when the OS locale is set to POSIX (#615)
Moved requirements to setup.cfg (#617)
[mac] Removed old C code for Python 2.5 in the fsevents C implementation
[snapshot] Added EmptyDirectorySnapshot (#613)
Thanks to our beloved contributors: @Ajordat, @tehkirill, @BoboTiG
0.10.0
2020-01-26 • full history
Breaking Changes
Dropped support for Python 2.6, 3.2 and 3.3
Emitters that failed to start are now removed
[snapshot] Removed the deprecated walker_callback argument, use stat instead
[watchmedo] The utility is no more installed by default but via the extra watchdog[watchmedo]
Other Changes
Fixed several Python 3 warnings
Identify synthesized events with is_synthetic attribute (#369)
Use os.scandir() to improve memory usage (#503)
[bsd] Fixed flavors of FreeBSD detection (#529)
[bsd] Skip unprocessable socket files (#509)
[inotify] Fixed events containing non-ASCII characters (#516)
[inotify] Fixed the way OSError are re-raised (#377)
[inotify] Fixed wrong source path after renaming a top level folder (#515)
[inotify] Removed delay from non-move events (#477)
[mac] Fixed a bug when calling FSEventsEmitter.stop() twice (#466)
[mac] Support for unscheduling deleted watch (#541)
[mac] Fixed missing field initializers and unused parameters in watchdog_fsevents.c
[snapshot] Don’t walk directories without read permissions (#408)
[snapshot] Fixed a race condition crash when a directory is swapped for a file (#513)
[snasphot] Fixed an AttributeError about forgotten path_for_inode attr (#436)
[snasphot] Added the ignore_device=False parameter to the ctor (597)
[watchmedo] Fixed the path separator used (#478)
[watchmedo] Fixed the use of yaml.load() for yaml.safe_load() (#453)
[watchmedo] Handle all available signals (#549)
[watchmedo] Added the --debug-force-polling argument (#404)
[windows] Fixed issues when the observed directory is deleted (#570 and #601)
[windows] WindowsApiEmitter made easier to subclass (#344)
[windows] Use separate ctypes DLL instances
[windows] Generate sub created events only if recursive=True (#454)
Thanks to our beloved contributors: @BoboTiG, @LKleinNux, @rrzaripov, @wildmichael, @TauPan, @segevfiner, @petrblahos, @QuantumEnergyE, @jeffwidman, @kapsh, @nickoala, @petrblahos, @julianolf, @tonybaloney, @mbakiev, @pR0Ps, javaguirre, @skurfer, @exarkun, @joshuaskelly, @danilobellini, @Ajordat
0.9.0
2018-08-28 • full history
Deleting the observed directory now emits a DirDeletedEvent event
[bsd] Improved the platform detection (#378)
[inotify] Fixed a crash when the root directory being watched by was deleted (#374)
[inotify] Handle systems providing uClibc
[linux] Fixed a possible DirDeletedEvent duplication when deleting a directory
[mac] Fixed unicode path handling fsevents2.py (#298)
[watchmedo] Added the --debug-force-polling argument (#336)
[windows] Fixed the FILE_LIST_DIRECTORY constant (#376)
Thanks to our beloved contributors: @vulpeszerda, @hpk42, @tamland, @senden9, @gorakhargosh, @nolsto, @mafrosis, @DonyorM, @anthrotype, @danilobellini, @pierregr, @ShinNoNoir, @adrpar, @gforcada, @pR0Ps, @yegorich, @dhke
0.8.3
2015-02-11 • full history
Fixed the use of the root logger (#274)
[inotify] Refactored libc loading and improved error handling in inotify_c.py
[inotify] Fixed a possible unbound local error in inotify_c.py
Thanks to our beloved contributors: @mmorearty, @tamland, @tony, @gorakhargosh
0.8.2
2014-10-29 • full history
Event emitters are no longer started on schedule if Observer is not already running
[mac] Fixed unused arguments to pass clang compilation (#265)
[snapshot] Fixed a possible race condition crash on directory deletion (#281)
[windows] Fixed an error when watching the same folder again (#270)
Thanks to our beloved contributors: @tamland, @apetrone, @Falldog, @theospears
0.8.1
2014-07-28 • full history
0.8.0
2014-07-02 • full history
Fixed argh deprecation warnings (#242)
[snapshot] Methods returning internal stats info were replaced by mtime(), inode() and path() methods
[snapshot] Deprecated the walker_callback argument
[watchmedo] Fixed auto-restart to terminate all children processes (#225)
[watchmedo] Added the --no-parallel argument (#227)
[windows] Fixed the value of INVALID_HANDLE_VALUE (#123)
[windows] Fixed octal usages to work with Python 3 as well (#223)
Thanks to our beloved contributors: @tamland, @Ormod, @berdario, @cro, @BernieSumption, @pypingou, @gotcha, @tommorris, @frewsxcv
Metadata
Release files for watchdog 7.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| watchdog-7.0.0.tar.gz | 208.6 kB | Without provenance | Details for watchdog-7.0.0.tar.gz |
Built distributions (wheels)
Total release size: 4.5 MB
Release files / watchdog-7.0.0.tar.gz
| Download URL | watchdog-7.0.0.tar.gz |
|---|---|
| Size | 208.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
128583e0ffa0e5c0531f9f37e2e24be1e7b0503561f6aa8b0aac5a1d646e2bf2
|
|
BLAKE2b-256 checksum How to use checksums |
92686477c65315fd5b58ea5c7fbfe871c3ca6e5ec951be6c48c2f5fe8ee5e34d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-win_ia64.whl
| Download URL | watchdog-7.0.0-py3-none-win_ia64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Python 3 Windows ia64 |
|
SHA-256 checksum How to use checksums |
78a68bb0ec8949ad6f699accb9eaa037666cb7524552be43cb9f624cade27774
|
|
BLAKE2b-256 checksum How to use checksums |
8e67342d9b01b6c74ba17748dd66018f037e554880f37f8e52279690e20c2e78
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-win_arm64.whl
| Download URL | watchdog-7.0.0-py3-none-win_arm64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
047f5f823286add71294ff1a186c9fc89fea4a2afa2a1d91513b64dbf43fd473
|
|
BLAKE2b-256 checksum How to use checksums |
30791effeba91e22c84e4b4bedb8ead8be4d05574c52161244f3701d4f73a5b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-win_amd64.whl
| Download URL | watchdog-7.0.0-py3-none-win_amd64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
129b28aa1e9fe80316968752d0b366171925329ad0b2b9f015717a974b9e0351
|
|
BLAKE2b-256 checksum How to use checksums |
0ae2f456fe4422d8f1cd460003c8bf637be47707767dd738036ee77484fd436c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-win32.whl
| Download URL | watchdog-7.0.0-py3-none-win32.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Python 3 Windows x86-32 |
|
SHA-256 checksum How to use checksums |
2e8f015b3e9971dd3280cf50def74d2c928f5c218eba5d4a720458b314f8ced9
|
|
BLAKE2b-256 checksum How to use checksums |
7bd7b904c56841e6e03b896ae2af81ba99ab5fb8418922291deb822818b3e120
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux_2_17_x86_64.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux_2_17_x86_64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
e48cacca21a7e35711552686f1fd9f17b5ff9662bbe807d69b5e1b02a81462ab
|
|
BLAKE2b-256 checksum How to use checksums |
902af9ef889994f373c02f64ad7c0ec266b96f5c808f7bf5bc279a895b54b6b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux_2_17_s390x.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux_2_17_s390x.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ IBM System/390x Python 3 |
|
SHA-256 checksum How to use checksums |
a2deceb918489b5c7094761705b73a75a67528b92c73cdb0a6cf3ca0d4acdb43
|
|
BLAKE2b-256 checksum How to use checksums |
edeadab378ada33abdcb5ccf72aba5e1968ed3252fe7b6b160e192762ebc2da1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux_2_17_ppc64le.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux_2_17_ppc64le.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ PowerPC 64-le Python 3 |
|
SHA-256 checksum How to use checksums |
ace8200735c9c289c2e4208af3ebb1b4074121d92896ab6dc253565d6cbc8fbe
|
|
BLAKE2b-256 checksum How to use checksums |
ee2ae1b9034333acd9bb6b08516343b139914c30388d65f2b9d416762e40f3bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux_2_17_ppc64.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux_2_17_ppc64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ PowerPC 64-be Python 3 |
|
SHA-256 checksum How to use checksums |
6afb0506266b6a6d5685330a6f36ad3c866713f05edc0a5f76f83f31c37210ef
|
|
BLAKE2b-256 checksum How to use checksums |
8b66d657be3651faa795175809af942942ba0dea45b5c9661626213273217a7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux_2_17_i686.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux_2_17_i686.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
298d608cdd11fb44b6c76f4f0acd0f2bf58d9d0563fc8a5dfea7bba0d483769a
|
|
BLAKE2b-256 checksum How to use checksums |
9dfc4b2f4fe2dca98cca6da5a656e09df6ad39168158a552858e6d138bdb67df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux_2_17_armv7l.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux_2_17_armv7l.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
0eb01cf469399fc7a83d1a322d32d0da58e925bb96b8a08477eb484d7e013459
|
|
BLAKE2b-256 checksum How to use checksums |
8ca9d5d868e4958a46d633f14ec29a70db9be98dc15d1d238e1fb2ccbcb5314f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux_2_17_aarch64.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux_2_17_aarch64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
60d6152735d8dbee0384cb32594087bf2b06d68b1e0d67679b6b42b52b2246dd
|
|
BLAKE2b-256 checksum How to use checksums |
a7241c89a93735f239f3380d5819853e70fa9e369c1f062ea91cbba44d99c94d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux2014_x86_64.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux2014_x86_64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
edbfd843840fa8a750d79ed69e65ab67965748f9ccfc56ff957e1cee4a8cf796
|
|
BLAKE2b-256 checksum How to use checksums |
e242cc0b880fb78c3b690a817647d85f27b6b9642e3c94972f18d6c77fe03303
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux2014_s390x.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux2014_s390x.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ IBM System/390x Python 3 |
|
SHA-256 checksum How to use checksums |
2b8b3e3bc0f9b60ce65c02735c95f51cea8d9fb1164ae38347670255decf5008
|
|
BLAKE2b-256 checksum How to use checksums |
91a36276378482a10efc7fb539c98a4f05e414ce332482b46830007cf20916a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux2014_ppc64le.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux2014_ppc64le.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ PowerPC 64-le Python 3 |
|
SHA-256 checksum How to use checksums |
9d9413bed7cc80c508809a5d7b980ece6e339aa61eb6211037732ff032676155
|
|
BLAKE2b-256 checksum How to use checksums |
524450af0c256cd7a095d7172aab4fd4879de1eb761dc9dc390091f3b62953d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux2014_ppc64.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux2014_ppc64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ PowerPC 64-be Python 3 |
|
SHA-256 checksum How to use checksums |
6434bc0860ee9a4b2885fe7b7b49db14c6ea2475bb5b2e8bdbc409fc2722d462
|
|
BLAKE2b-256 checksum How to use checksums |
79dcdfe40c72ea7292ee644d95beecf61b599ec11b40c9cba0a4cf121257d6e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux2014_i686.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux2014_i686.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ x86-32 Python 3 |
|
SHA-256 checksum How to use checksums |
d1c379ba81f284a6fa8437cbe2fc8c3c5fdecf26d3b7a38aadafbbc45773dcce
|
|
BLAKE2b-256 checksum How to use checksums |
ff64a511e40c06b7a518f2f0227372fe06ee96a619f9209a125f9ac6a02d60c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux2014_armv7l.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux2014_armv7l.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ ARMv7l Python 3 |
|
SHA-256 checksum How to use checksums |
3c6dad060a0a583a3e5e4ae7ba521329d6bd26522a1f6eb17089c8c352e6c436
|
|
BLAKE2b-256 checksum How to use checksums |
1a654882864e2156ef1532a90365b33fad03cba045f30d2b143a57d6e09cf58e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-py3-none-manylinux2014_aarch64.whl
| Download URL | watchdog-7.0.0-py3-none-manylinux2014_aarch64.whl |
|---|---|
| Size | 102.2 kB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
323cfccbb716d71f3768e92ad95a53e1b43a2b962a2f7d2389ff5e6f83d2a553
|
|
BLAKE2b-256 checksum How to use checksums |
2ba9693dbc78b5e9abb282ef6c8bff3dd4a01560adf1ae195d6a6243d2dca531
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp315-cp315t-macosx_11_0_arm64.whl
| Download URL | watchdog-7.0.0-cp315-cp315t-macosx_11_0_arm64.whl |
|---|---|
| Size | 112.9 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4bb2352f0826b3bb99ac55f6bb4741f41962719995cb4b3d1c6b25ec46e70257
|
|
BLAKE2b-256 checksum How to use checksums |
d76e4de7eb11e53be4a3a661829eb37e1c7cd75178729c13d85636ab5aeb50e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp315-cp315t-macosx_10_15_x86_64.whl
| Download URL | watchdog-7.0.0-cp315-cp315t-macosx_10_15_x86_64.whl |
|---|---|
| Size | 112.3 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
e6e5ddae065d72383b88fd83b03c8c359a2289497e229f2ceb45e16728a63356
|
|
BLAKE2b-256 checksum How to use checksums |
9be50af992caabbadd0224d44e283f5644e67be74b1ccc46673955482b90c6c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp315-cp315t-macosx_10_15_universal2.whl
| Download URL | watchdog-7.0.0-cp315-cp315t-macosx_10_15_universal2.whl |
|---|---|
| Size | 122.1 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
b0a90021c0b36853819cc374950434af37c83567217d7e29dc0fbbb2d879c84c
|
|
BLAKE2b-256 checksum How to use checksums |
79addd8e60fec845f3d92d8b9e8f242726cad17f90e78fd4f36e16c6a63e4f26
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp315-cp315-macosx_11_0_arm64.whl
| Download URL | watchdog-7.0.0-cp315-cp315-macosx_11_0_arm64.whl |
|---|---|
| Size | 112.5 kB |
| Tags | CPython 3.15 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
d740d9cde27edcc4fa9df089b58cdff5f68d32c2ec5dacded16546658b82cf7b
|
|
BLAKE2b-256 checksum How to use checksums |
4af8407879a9de0be8aa00451db783c7dc841ca6c101ddc5b5eb5acf7170b81c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp315-cp315-macosx_10_15_x86_64.whl
| Download URL | watchdog-7.0.0-cp315-cp315-macosx_10_15_x86_64.whl |
|---|---|
| Size | 112.0 kB |
| Tags | CPython 3.15 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
cc806addff5906521f1a106d07485853da635b4ce2677387546c058aa7de13de
|
|
BLAKE2b-256 checksum How to use checksums |
38db0c13178087d1209e9b4ce36c4e6373ac204f15c305abd4d34bf44bf83dad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp315-cp315-macosx_10_15_universal2.whl
| Download URL | watchdog-7.0.0-cp315-cp315-macosx_10_15_universal2.whl |
|---|---|
| Size | 121.4 kB |
| Tags | CPython 3.15 macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
c9c11d4eab13f1e50fdd08e86afbf7ebc32bcafdd015fae2954e5854e9ffba4c
|
|
BLAKE2b-256 checksum How to use checksums |
a14ecd445c5de4bc49ce043b6e22dcc33cacdde4a79b5a8ac7fbf6ab387100aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | watchdog-7.0.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 112.9 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5fa065ae0449f010104f619723fa89698e0c187a2925f2998f470f2f24b51b9b
|
|
BLAKE2b-256 checksum How to use checksums |
71526faab6a670dc4124f3c33521d3f7d2a8d92c1f13db5febd1b5619aa141c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp314-cp314t-macosx_10_15_x86_64.whl
| Download URL | watchdog-7.0.0-cp314-cp314t-macosx_10_15_x86_64.whl |
|---|---|
| Size | 112.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
c8d5d33611e35c7492f055a0bcf7fe6894df9f8f0f2c1acedb2ed95369eaa5b9
|
|
BLAKE2b-256 checksum How to use checksums |
d2673aa374ae23305948e3aae9a2ce8c4ce4fee61da05df1386f23db62969d41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp314-cp314t-macosx_10_15_universal2.whl
| Download URL | watchdog-7.0.0-cp314-cp314t-macosx_10_15_universal2.whl |
|---|---|
| Size | 122.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
03a2c85c63cce3cbda9ab6ce21ca401e95b6f681cc6f70316f4f882b3c8f1315
|
|
BLAKE2b-256 checksum How to use checksums |
25061771a2cb86c4e1b5931c9cd3054486412397a7963911c7b6d95e440e2954
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | watchdog-7.0.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 112.5 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e00d09a546db40620621b7d49332802b845db23256560f5c1efa95d333683045
|
|
BLAKE2b-256 checksum How to use checksums |
2ba55c1ee3498aba5559d038bd50955d7a0692aa6b3e79188a4132c48a90713b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp314-cp314-macosx_10_15_x86_64.whl
| Download URL | watchdog-7.0.0-cp314-cp314-macosx_10_15_x86_64.whl |
|---|---|
| Size | 112.0 kB |
| Tags | CPython 3.14 macOS 10.15+ x86-64 |
|
SHA-256 checksum How to use checksums |
8b214497509fe08690bf0b7426ebccc3444b750fdec51d7fb1d04c5acf5fa266
|
|
BLAKE2b-256 checksum How to use checksums |
c7a622c4faad6fa3b006d6d7502115c22df8af3281148c51e8d205fa4f8a9422
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp314-cp314-macosx_10_15_universal2.whl
| Download URL | watchdog-7.0.0-cp314-cp314-macosx_10_15_universal2.whl |
|---|---|
| Size | 121.3 kB |
| Tags | CPython 3.14 macOS 10.15+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
2ed22c5c11dde52db942792340862202a51e15acff0f57a7ac1d92ee14f4176f
|
|
BLAKE2b-256 checksum How to use checksums |
1e8f00e076d99a3dd2fceb83668cf6e7ff02c468d8c4aff725b003b49d35d39f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | watchdog-7.0.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 112.5 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
72e667ca184ab0dea5264a5a636d7a6d6e18bb8cd8a50f3c818005050d4e7a3b
|
|
BLAKE2b-256 checksum How to use checksums |
94a04d63c53f9bb76a79ca691992835d42f737913eb5020b29cb21cb6d551d79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | watchdog-7.0.0-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 111.9 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
f06a2d489adcbd6e1f1faa6eb74b167d1f78fc4dc3bccb309a09d0e2cea1fc8e
|
|
BLAKE2b-256 checksum How to use checksums |
4116034b5f9fe7f76c71bfe37bcdf7b9878d5f0f4bae093c0234e65d39d1076a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp313-cp313-macosx_10_13_universal2.whl
| Download URL | watchdog-7.0.0-cp313-cp313-macosx_10_13_universal2.whl |
|---|---|
| Size | 119.8 kB |
| Tags | CPython 3.13 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
8fb2b4fac4a6d37d28eaac680e0394882a60d900e3da8eaf361dfc878a194f86
|
|
BLAKE2b-256 checksum How to use checksums |
650c74b7b1d425825a63edd5ce97cad6e8123e5584472bb5d2babe6d44c4a69e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | watchdog-7.0.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 112.5 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ea19e8857af78d23b45f80c316e502159443fba2f382b1361ab7d96e3848bb01
|
|
BLAKE2b-256 checksum How to use checksums |
a185ccff29f97a4c83849fd6031006fda388edb2fad9cefe9129c9e242ddebe6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | watchdog-7.0.0-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 112.0 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
a85b33573e3b8c6e41c0e49c64b917d04216dfe63697e85c3c029bcf323ad81c
|
|
BLAKE2b-256 checksum How to use checksums |
76163d2eec74cd1791bdae3cfa71e16d499e08f99c531a95c1f21efc5704ce95
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp312-cp312-macosx_10_13_universal2.whl
| Download URL | watchdog-7.0.0-cp312-cp312-macosx_10_13_universal2.whl |
|---|---|
| Size | 119.9 kB |
| Tags | CPython 3.12 macOS 10.13+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
68fd4d437b1d0d17b49633f5e12a35e93e36c5ba59a05e39e50038e04fa5d991
|
|
BLAKE2b-256 checksum How to use checksums |
6e4b24986bba9021fc931f25fab8f17285182a929d717b63533866a5951909a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | watchdog-7.0.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 112.5 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
39aae4fcb1822d0e1a97908399165d7f9a1c5a05f3fe0b0f89c75f8fe0c1e9c9
|
|
BLAKE2b-256 checksum How to use checksums |
9c3a6399cfb3aaa4f7a0ca871dd8e5d249d4ba41fc9377355a11fe9a4eff1835
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | watchdog-7.0.0-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 111.9 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
210246265c432fa3693904d94e20f0c4b48cda35e55f05d3ac176702321f664c
|
|
BLAKE2b-256 checksum How to use checksums |
b8fcbe0aa604ca4c367f75bd58366c38eb3e4c7c2a0585a46406e1aca3870823
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Release files / watchdog-7.0.0-cp311-cp311-macosx_10_9_universal2.whl
| Download URL | watchdog-7.0.0-cp311-cp311-macosx_10_9_universal2.whl |
|---|---|
| Size | 119.9 kB |
| Tags | CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
05be1e2f84268918bd3fea26694ad38678ed990355f5b085181401a12cf86557
|
|
BLAKE2b-256 checksum How to use checksums |
bcc9e2f07a8b02927f440fe9b9ef9f6b63aa5623208d85d82f97ab7a190e4c99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Security for watchdog 7.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.