NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #294 most downloaded on PyPI
Filesystem events monitoring
Last release 2 years ago
no release in 18 months
Release timing varies
gaps range from 2 weeks to 11 months
Most releases are documented
notes for 40 of 52 stable releases
2 versions withdrawn
withdrawn after publishing
16 years old
54 releases · first in 2011
[inotify] Use of select.poll() instead of deprecated select.select() , if available.
select.poll() instead of deprecated select.select(), if available. (#1078)echo_class() function from the echo module.echo_instancemethod() function from the echo module.echo_module() function from the echo module.is_class_private_name() function from the echo module.is_classmethod() function from the echo module.is_method(met() function from the echo module.method_name() function from the echo module.name() function from the echo module.--trace CLI argument from the watchmedo log command, useless since events are logged by default at the LoggerTrick class level.stop_signal keyword-argument type of the AutoRestartTrick class can now be either a signal.Signals or an int.__repr__() method to the Trick class.__repr__() method to the HelpFormatter class.💟 Thanks to our beloved contributors: @g-pichler, @ethan-vanderheijden, @nhairs, @BoboTiG
One column per quarter.
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
[inotify] Improve cleaning up Inotify threads, and add eventlet test cases
Inotify threads, and add eventlet test cases (#1070)💟 Thanks to our beloved contributors: @ethan-vanderheijden, @BoboTiG
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
[watchmedo] Fix tricks argument type of schedule_tricks()
[kqueue] Fix TypeError: kqueue.control() only accepts positional parameters
2024-09-02 • full history
[kqueue] Fix TypeError: kqueue.control() only accepts positional parameters (#1062)
Thanks to our beloved contributors: @apoirier, @BoboTiG
[core] Enforced usage of proper keyword-arguments
BaseObserverSubclassCallable class to ObserverType (#1055)inotify_event_struct class to InotifyEventStruct (#1055)UnsupportedLibc exception to UnsupportedLibcError (#1057)InotifyConstants.IN_CLOSE constant (#1046)LogLevelException exception to LogLevelError (#1057)WatchdogShutdown exception to WatchdogShutdownError (#1057)FILE_NOTIFY_INFORMATION class to FileNotifyInformation (#1055)WATCHDOG_TRAVERSE_MOVED_DIR_DELAY constant (#1057)disallow_untyped_calls Mypy rule (#1055)disallow_untyped_defs Mypy rule (#1060)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
[core] Run ruff , apply several fixes
ruff, apply several fixes (#1033)events.pyPatternMatchingEventHandler docstrings (#1048)event_filter keyword-argument to FSEventsObserver.schedule() (#1049)AutoRestartTrick (#1002)watchmedo.py💟 Thanks to our beloved contributors: @BoboTiG, @nbelakovski, @ivg
[inotify] Fix missing event_filter for the full emitter
2024-05-23 • full history
[inotify] Fix missing event_filter for the full emitter (#1032)
Thanks to our beloved contributors: @mraspaud, @BoboTiG
[events] FileSystemEvent , and subclasses, are now dataclass es, and their repr() has changed
FileSystemEvent, and subclasses, are now dataclasses, and their repr() has changedWinAPINativeEvent is now a dataclass, and its repr() has changedobservers.read_directory_changes.WATCHDOG_TRAVERSE_MOVED_DIR_DELAY hack was removed. The constant will be kept to prevent breaking other softwares.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
watchdog is now PEP 561 compatible, and tested with mypy
watchdog is now PEP 561 compatible, and tested with mypy> in FileSystemEvent.__repr__() (#980)InotifyEmitter.queue_events() if not launched when thread is inactive (#963)threading.Event.isSet spelling (#962)💟 Thanks to our beloved contributors: @kurtmckee, @altendky, @agroszer, @BoboTiG
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
Run black on the entire source code
black on the entire source coderequirements-tests.txt file in the source distribution (#939)FileOpenedEvent events from AutoRestartTrick, and ShellCommandTrick, to restore watchdog < 2.3.0 behavior. A better solution should be found in the future. (#949)FileOpenedEvent, and FileClosedEvent, events in LoggerTrick💟 Thanks to our beloved contributors: @BoboTiG
black on the entire source coderequirements-tests.txt file in the source distribution (#939)FileOpenedEvent events from AutoRestartTrick, and ShellCommandTrick, to restore watchdog < 2.3.0 behavior. A better solution should be found in the future. (#949)FileOpenedEvent, and FileClosedEvent, events in LoggerTrick:heart_decoration: Thanks to our beloved contributors: @BoboTiG
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
[inotify] Add support for IN_OPEN events: a FileOpenedEvent event will be fired
IN_OPEN events: a FileOpenedEvent event will be fired (#941)auto-restart, only restarting once if many events happen in quick succession (--debounce-interval) (#940)--no-restart-on-command-exit) (#946)KeyboardInterrupt exception (Ctrl+C) (#945):heart_decoration: Thanks to our beloved contributors: @BoboTiG, @dstaple, @taleinat, @cernekj
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
Enable mypy to discover type hints as specified in PEP 561
signal.SIGHUP attribute on non-Unix OSes (#935):heart_decoration: Thanks to our beloved contributors: @BoboTiG, @simon04, @piotrpdev
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
[fsevents2] The fsevents2 observer is now deprecated
fsevents2 observer is now deprecated (#909)-1 is now allowed (#923)dirsnapshot.py (#930)SIGHUP (#912):heart_decoration: Thanks to our beloved contributors: @kurtmckee, @babymastodon, @QuantumEnergyE, @timgates42, @BoboTiG
[fsevents] Fix flakey test to assert that there are no errors when stopping the emitter.
OSError: [Errno 9] Bad file descriptor at shutdown. #805auto-restart restart the sub-process if it terminates. #896shell-command without --wait. #405:heart_decoration: Thanks to our beloved contributors: @samschott, @taleinat, @altendky, @BoboTiG
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
Fix adding failed emitters on observer schedule.
--kill-after argument for the auto-restart command. (#870)-q/--quiet and -v/--verbose arguments. (#889):heart_decoration: Thanks to our beloved contributors: @taleinat, @kianmeng, @palfrey, @IlayRosenberg, @BoboTiG
Eliminate timeout in waiting on event queue.
not equality implementation for InotifyEvent. (#848)PyYAML is loaded only when strictly necessary. Simple usages of watchmedo are possible without the module being installed. (#847):heart_decoration: Thanks to our beloved contributors: @sattlerc, @JanzenLiu, @BoboTiG
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
[bsd] Fixed returned paths in kqueue.py and restored the overall results of the test suite.
argh dependency in favor of the builtin argparse module. (#836)WindowsApiAsyncObserver references and --debug-force-winapi-async arguments.:heart_decoration: Thanks to our beloved contributors: @knobix, @AndreaRe9, @BoboTiG
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
Fix regression introduced in 2.1.4 (reverted "Allow overriding or adding custom event handlers to event dispatch map. (#814)").
str to list. (#831):heart_decoration: Thanks to our beloved contributors: @unique1o1, @BoboTiG
[watchmedo] Fix usage of os.setsid() and os.killpg() Unix-only functions.
os.setsid() and os.killpg() Unix-only functions. (#809)FileModifiedEvent on permission or ownership changes of a file. (#815)FSEeventsEmitter with os.path.realpath(). (#822)AttributeError in SkipRepeatsQueue._put(). (#818):heart_decoration: Thanks to our beloved contributors: @replabrobin, @BoboTiG, @SamSchott, @AndreiB97, @NiklasRosenstein, @ikokollari, @mgorny
Publish macOS arm64 and universal2 wheels.
arm64 and universal2 wheels. (#740)💟 Thanks to our beloved contributors: @kainjow, @BoboTiG
2021-06-26 • full history
Publish macOS arm64 and universal2 wheels. (#740)
Thanks to our beloved contributors: @kainjow, @BoboTiG
[mac] Fix relative path handling for non-recursive watch.
start() were missed. Add a workaround for that. (#796)💟 Thanks to our beloved contributors: @oprypin, @CCP-Aporia, @BoboTiG
[mac] Fix callback exceptions when the watcher is deleted but still receiving events
💟 Thanks to our beloved contributors: @rom1win, @BoboTiG, @CCP-Aporia
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
[inotify] Simplify libc loading
libc loading (#776)FSEventsEmitter (#779)--debug-force-* arguments to tricks (#781)💟 Thanks to our beloved contributors: @CCP-Aporia, @aodj, @UnitedMarsupials, @BoboTiG
[mac] Use logger.debug() instead of logger.info()
logger.debug() instead of logger.info() (#774)💟 Thanks to our beloved contributors: @globau, @imba-tjd, @BoboTiG
[mac] Add missing exception objects
💟 Thanks to our beloved contributors: @CCP-Aporia, @BoboTiG
2021-02-22 • full history
[mac] Add missing exception objects (#766)
Thanks to our beloved contributors: @CCP-Aporia, @BoboTiG
[mac] Fix a segmentation fault when dealing with unicode paths
💟 Thanks to our beloved contributors: @SamSchott, @BoboTiG
Avoid deprecated PyEval_InitThreads on Python 3.7+
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)PyEval_InitThreads on Python 3.7+ (#746)💟 Thanks to our beloved contributors: @bstaletic, @lukassup, @ysard, @SamSchott, @CCP-Aporia, @BoboTiG
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
Wheels are published for GNU/Linux, macOS and Windows
event_id attribute in fsevents (#721)fsevents (#726)💟 Thanks to our beloved contributors: @SamSchott, @CCP-Aporia, @di, @BoboTiG
2020-12-10 • Fix version with good metadatas.
2020-12-10 • Fix version with good metadatas.
Removed the long-time deprecated events.LoggingFileSystemEventHandler class, use LoggingEventHandler instead
winapi.BUFFER_SIZE now defaults to 64000 (instead of 2048) (#700)pathlib from the standard library, instead of pathtools (#556)events.LoggingFileSystemEventHandler class, use LoggingEventHandler insteadfsevents (#717)winapi.BUFFER_SIZE now defaults to 64000 (instead of 2048) (#700)winapi.PATH_BUFFER_SIZE (defaults to 2048) to keep the old behavior with path-realted functions (#700)pathlib from the standard library, instead of pathtools (#556)events.LoggingFileSystemEventHandler class, use LoggingEventHandler instead💟 Thanks to our beloved contributors: @SamSchott, @bstaletic, @BoboTiG, @CCP-Aporia
[backport 1.0.0] Removed the long-time deprecated events.LoggingFileSystemEventHandler class, use LoggingEventHandler instead
fsevents (#717)winapi.BUFFER_SIZE now defaults to 64000 (instead of 2048) (#700)winapi.PATH_BUFFER_SIZE (defaults to 2048) to keep the old behavior with path-realted functions (#700)events.LoggingFileSystemEventHandler class, use LoggingEventHandler insteadevent_id attribute in fsevents (#721)fsevents (#726`)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)💟 Thanks to our beloved contributors: @SamSchott, @bstaletic, @BoboTiG, @CCP-Aporia, @di, @lukassup, @ysard, @lovasoa
Nothing published for this version
[mac] Regression fixes for native fsevents
Add logger parameter for the LoggingEventHandler
logger parameter for the LoggingEventHandler (#676)if None implementation in RegexMatchingEventHandler (#677)fsevents module (#680)watchdog_fsevents.c on non-macOS machines (#687)SIGTERM and SIGINT more reliably (#693)Ensure ObservedWatch.path is a string
ObservedWatch.path is a string (#651)Fixed the build_ext command on macOS Catalina
build_ext command on macOS Catalina (#628)dispatch() method of FileSystemEventHandler, PatternMatchingEventHandler and RegexMatchingEventHandlerFixed Python 2.7 to 3.6 installation when the OS locale is set to POSIX
build_ext command on macOS (#618, #620)setup.cfg (#617)fsevents C implementationEmptyDirectorySnapshot (#613)[snapshot] Removed the deprecated walker_callback argument, use stat instead
2020-01-26 • full history
walker_callback argument, use stat insteadwatchdog[watchmedo]is_synthetic attribute (#369)os.scandir() to improve memory usage (#503)OSError are re-raised (#377)FSEventsEmitter.stop() twice (#466)watchdog_fsevents.cAttributeError about forgotten path_for_inode attr (#436)ignore_device=False parameter to the ctor (#597)yaml.load() for yaml.safe_load() (#453)--debug-force-polling argument (#404)WindowsApiEmitter made easier to subclass (#344)recursive=True (#454)Deleting the observed directory now emits a DirDeletedEvent event
2018-08-28 • full history
DirDeletedEvent eventDirDeletedEvent duplication when deleting a directoryfsevents2.py (#298)--debug-force-polling argument (#336)FILE_LIST_DIRECTORY constant (#376)Fixed the use of the root logger
2015-02-11 • full history
inotify_c.pyinotify_c.pyEvent emitters are no longer started on schedule if Observer is not already running
2014-10-29 • full history
Observer is not already runningFixed anon_inode descriptors leakage
2014-07-28 • full history
anon_inode descriptors leakage (#249)Fixed argh deprecation warnings
2014-07-02 • full history
argh deprecation warnings (#242)mtime(), inode() and path() methodswalker_callback argumentauto-restart to terminate all children processes (#225)--no-parallel argument (#227)INVALID_HANDLE_VALUE (#123)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →