2024-xx-xx • full history
- [inotify] Use of
select.poll()
instead of deprecatedselect.select()
, if available. (#1078) - Thanks to our beloved contributors: @BoboTiG, @
2024-09-27 • full history
- [inotify] Improve cleaning up
Inotify
threads, and addeventlet
test cases (#1070) - Thanks to our beloved contributors: @BoboTiG, @ethan-vanderheijden
2024-09-03 • full history
- Enable OS specific Mypy checks (#1064)
- [watchmedo] Fix
tricks
argument type ofschedule_tricks()
(#1063) - Thanks to our beloved contributors: @gnought, @BoboTiG
2024-09-02 • full history
- [kqueue] Fix
TypeError: kqueue.control() only accepts positional parameters
(#1062) - Thanks to our beloved contributors: @apoirier, @BoboTiG
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 toObserverType
(#1055) - [inotify] Renamed the
inotify_event_struct
class toInotifyEventStruct
(#1055) - [inotify] Renamed the
UnsupportedLibc
exception toUnsupportedLibcError
(#1057) - [inotify] Removed the
InotifyConstants.IN_CLOSE
constant (#1046) - [watchmedo] Renamed the
LogLevelException
exception toLogLevelError
(#1057) - [watchmedo] Renamed the
WatchdogShutdown
exception toWatchdogShutdownError
(#1057) - [windows] Renamed the
FILE_NOTIFY_INFORMATION
class toFileNotifyInformation
(#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. AFileClosedNoWriteEvent
event will be fired, and itson_closed_no_write()
dispatcher has been introduced (#1046) - Thanks to our beloved contributors: @BoboTiG
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 toFSEventsObserver.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
2024-05-23 • full history
- [inotify] Fix missing
event_filter
for the full emitter (#1032) - Thanks to our beloved contributors: @mraspaud, @BoboTiG
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 nowdataclass``es, and their ``repr()
has changed - [windows]
WinAPINativeEvent
is now adataclass
, and itsrepr()
has changed - [events] Log
FileOpenedEvent
, andFileClosedEvent
, events inLoggingEventHandler
- [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 softwares. - Thanks to our beloved contributors: @BoboTiG, @msabramo
2023-03-20 • full history
- Drop support for Python 3.6.
watchdog
is now PEP 561 compatible, and tested withmypy
- Fix missing
>
inFileSystemEvent.__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
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 fromAutoRestartTrick
, andShellCommandTrick
, to restore watchdog < 2.3.0 behavior. A better solution should be found in the future. (#949) - [watchmedo] Log
FileOpenedEvent
, andFileClosedEvent
, events inLoggerTrick
- Thanks to our beloved contributors: @BoboTiG
2023-02-23 • full history
- [inotify] Add support for
IN_OPEN
events: aFileOpenedEvent
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
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
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
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
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 theauto-restart
command. (#870) - [watchmedo] Fix broken parsing of boolean arguments. (#887)
- [watchmedo] Fix broken parsing of commands from
auto-restart
, andshell-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
2022-03-25 • full history
- Eliminate timeout in waiting on event queue. (#861)
- [inotify] Fix
not
equality implementation forInotifyEvent
. (#848) - [watchmedo] Fix calling commands from within a Python script. (#879)
- [watchmedo]
PyYAML
is loaded only when strictly necessary. Simple usages ofwatchmedo
are possible without the module being installed. (#847) - Thanks to our beloved contributors: @sattlerc, @JanzenLiu, @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 builtinargparse
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
2021-08-23 • full history
- Fix regression introduced in 2.1.4 (reverted "Allow overriding or adding custom event handlers to event dispatch map. (#814)"). (#830)
- Convert regexes of type
str
tolist
. (831) - Thanks to our beloved contributors: @unique1o1, @BoboTiG
2021-08-19 • full history
- [watchmedo] Fix usage of
os.setsid()
andos.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
withos.path.realpath()
. (#822) - Fix a possible
AttributeError
inSkipRepeatsQueue._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
2021-06-26 • full history
- Publish macOS
arm64
anduniversal2
wheels. (#740) - Thanks to our beloved contributors: @kainjow, @BoboTiG
2021-05-19 • full history
- [mac] Fix relative path handling for non-recursive watch. (#797)
- [windows] On PyPy, events happening right after
start()
were missed. Add a workaround for that. (#796) - Thanks to our beloved contributors: @oprypin, @CCP-Aporia, @BoboTiG
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
2021-05-04 • full history
- [inotify] Simplify
libc
loading (#776) - [mac] Add support for non-recursive watches in
FSEventsEmitter
(#779) - [watchmedo] Add support for
--debug-force-*
arguments totricks
(#781) - Thanks to our beloved contributors: @CCP-Aporia, @aodj, @UnitedMarsupials, @BoboTiG
2021-04-22 • full history
- [mac] Use
logger.debug()
instead oflogger.info()
(#774) - Updated documentation links (#777)
- Thanks to our beloved contributors: @globau, @imba-tjd, @BoboTiG
2021-02-22 • full history
- [mac] Add missing exception objects (#766)
- Thanks to our beloved contributors: @CCP-Aporia, @BoboTiG
2021-02-17 • full history
- [mac] Fix a segmentation fault when dealing with unicode paths (#763)
- Moved the CI from Travis-CI to GitHub Actions (#764)
- Thanks to our beloved contributors: @SamSchott, @BoboTiG
2021-02-11 • full history
- Avoid deprecated
PyEval_InitThreads
on Python 3.7+ (#746) - [inotify] Add support for
IN_CLOSE_WRITE
events. AFileCloseEvent
event will be fired. Note thatIN_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
2020-12-18 • full history
- Wheels are published for GNU/Linux, macOS and Windows (#739)
- [mac] Fix missing
event_id
attribute infsevents
(#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
2020-12-10 • Fix version with good metadatas.
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 to64000
(instead of2048
) (#700) - [windows] Introduced
winapi.PATH_BUFFER_SIZE
(defaults to2048
) 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, useLoggingEventHandler
instead - Thanks to our beloved contributors: @SamSchott, @bstaletic, @BoboTiG, @CCP-Aporia
2020-11-21 • full history
- Add
logger
parameter for theLoggingEventHandler
(#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
andSIGINT
more reliably (#693) - Thanks to our beloved contributors: @Sraw, @CCP-Aporia, @BoboTiG, @maybe-sybr
2020-06-25 • full history
- Ensure
ObservedWatch.path
is a string (#651) - [inotify] Allow to monitor single file (#655)
- [inotify] Prevent raising an exception when a file in a monitored folder has no permissions (#669, #670)
- Thanks to our beloved contributors: @brant-ruan, @rec, @andfoy, @BoboTiG
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 ofFileSystemEventHandler
,PatternMatchingEventHandler
andRegexMatchingEventHandler
- [bsd] Improved tests support on non Windows/Linux platforms (#633, #639)
- [bsd] Added FreeBSD CI support (#532)
- [bsd] Restored full support (#638, #641)
- Thanks to our beloved contributors: @BoboTiG, @evilham, @danilobellini
2020-01-30 • full history
- Fixed Python 2.7 to 3.6 installation when the OS locale is set to POSIX (#615)
- Fixed the
build_ext
command on macOS (#618, #620) - 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
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, usestat
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 forgottenpath_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()
foryaml.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
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
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
2014-10-29 • full history
- Event emitters are no longer started on schedule if
Observer
is not already running - [mac] Fixed usued 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
2014-07-28 • full history
- Fixed
anon_inode
descriptors leakage (#249) - [inotify] Fixed thread stop dead lock (#250)
- Thanks to our beloved contributors: @Witos, @adiroiban, @tamland
2014-07-02 • full history
- Fixed
argh
deprecation warnings (#242) - [snapshot] Methods returning internal stats info were replaced by
mtime()
,inode()
andpath()
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