.. :changelog: Changelog --------- 4.0.1 ~~~~~ 2024-xx-xx • `full history `__ - [inotify] Fix missing ``event_filter`` for the full emitter (`#1032 `__) - Thanks to our beloved contributors: @mraspaud 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 softwares. - 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 `__ - 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`` to ``list``. (`831 `__) - Thanks to our beloved contributors: @unique1o1, @BoboTiG 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 `__ - [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 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 `__ - [inotify] Simplify ``libc`` loading (`#776 `__) - [mac] Add support for non-recursive watches in ``FSEventsEmitter`` (`#779 `__) - [watchmedo] Add support for ``--debug-force-*`` arguments to ``tricks`` (`#781 `__) - Thanks to our beloved contributors: @CCP-Aporia, @aodj, @UnitedMarsupials, @BoboTiG 2.0.3 ~~~~~ 2021-04-22 • `full history `__ - [mac] Use ``logger.debug()`` instead of ``logger.info()`` (`#774 `__) - Updated documentation links (`#777 `__) - Thanks to our beloved contributors: @globau, @imba-tjd, @BoboTiG 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 `__ - [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 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 `__ - 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 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 `__) - [bsd] Restored full support (`#638 `__, `#641 `__) - 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 `__) - 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 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 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 0.8.1 ~~~~~ 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 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