Skip to main content

Filesystem events monitoring

Project description

Build Status CirrusCI Status

Python API and shell utilities to monitor file system events.

Works on 3.8+.

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
import logging
from watchdog.observers import Observer
from watchdog.events import LoggingEventHandler

if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
    logging.info(f'start watching directory {path!r}')
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    finally:
        observer.stop()
        observer.join()

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 pytest pytest-cov
python -m pip install -e ".[watchmedo]"
python -m pytest tests

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

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.

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

  1. Python 3.8 or above.

  2. XCode (only on macOS when installing from sources)

  3. PyYAML (only for watchmedo)

Licensing

Watchdog is licensed under the terms of the Apache License, version 2.0.

Copyright 2011 Yesudeep Mangalapilly.

Copyright 2012 Google, Inc & contributors.

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

4.0.1

2024-05-23 • 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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

watchdog-4.0.1.tar.gz (126.6 kB view details)

Uploaded Source

Built Distributions

watchdog-4.0.1-py3-none-win_ia64.whl (83.0 kB view details)

Uploaded Python 3 Windows ia64

watchdog-4.0.1-py3-none-win_amd64.whl (83.0 kB view details)

Uploaded Python 3 Windows x86-64

watchdog-4.0.1-py3-none-win32.whl (83.0 kB view details)

Uploaded Python 3 Windows x86

watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl (83.0 kB view details)

Uploaded Python 3

watchdog-4.0.1-py3-none-manylinux2014_s390x.whl (83.0 kB view details)

Uploaded Python 3

watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl (83.0 kB view details)

Uploaded Python 3

watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl (83.0 kB view details)

Uploaded Python 3

watchdog-4.0.1-py3-none-manylinux2014_i686.whl (83.0 kB view details)

Uploaded Python 3

watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl (83.0 kB view details)

Uploaded Python 3

watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl (83.0 kB view details)

Uploaded Python 3

watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl (92.3 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (91.9 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl (92.3 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (91.9 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl (92.3 kB view details)

Uploaded PyPy macOS 11.0+ ARM64

watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (91.9 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl (93.0 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl (92.5 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl (101.7 kB view details)

Uploaded CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl (93.0 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl (92.5 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl (101.6 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl (93.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl (92.5 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl (101.6 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl (93.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl (92.5 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl (101.6 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl (93.0 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl (92.5 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl (101.6 kB view details)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file watchdog-4.0.1.tar.gz.

File metadata

  • Download URL: watchdog-4.0.1.tar.gz
  • Upload date:
  • Size: 126.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for watchdog-4.0.1.tar.gz
Algorithm Hash digest
SHA256 eebaacf674fa25511e8867028d281e602ee6500045b57f43b08778082f7f8b44
MD5 4293996af5abe331c94b5497d70e5015
BLAKE2b-256 1bf9b01e4632aed9a6ecc2b3e501feffd3af5aa0eb4e3b0283fc9525bf503c38

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-win_ia64.whl.

File metadata

  • Download URL: watchdog-4.0.1-py3-none-win_ia64.whl
  • Upload date:
  • Size: 83.0 kB
  • Tags: Python 3, Windows ia64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for watchdog-4.0.1-py3-none-win_ia64.whl
Algorithm Hash digest
SHA256 d7b9f5f3299e8dd230880b6c55504a1f69cf1e4316275d1b215ebdd8187ec88d
MD5 f108be05c9e4e0d3d7d6d03626a30261
BLAKE2b-256 db5423e5845ef68e1817b3792b2a11fb2088d7422814d41af8186d9058c4ff07

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-win_amd64.whl.

File metadata

  • Download URL: watchdog-4.0.1-py3-none-win_amd64.whl
  • Upload date:
  • Size: 83.0 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for watchdog-4.0.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 7577b3c43e5909623149f76b099ac49a1a01ca4e167d1785c76eb52fa585745a
MD5 7f452f8f2247356f3c0e4c542cc18a54
BLAKE2b-256 85e02a9f43008902427b5f074c497705d6ef8f815c85d4bc25fbf83f720a6159

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-win32.whl.

File metadata

  • Download URL: watchdog-4.0.1-py3-none-win32.whl
  • Upload date:
  • Size: 83.0 kB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for watchdog-4.0.1-py3-none-win32.whl
Algorithm Hash digest
SHA256 206afc3d964f9a233e6ad34618ec60b9837d0582b500b63687e34011e15bb429
MD5 162454d138298422bd21a331abd46795
BLAKE2b-256 8f5ec0d7dad506adedd584188578901871fe923abf6c0c5dc9e79d9be5c7c24e

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ac7041b385f04c047fcc2951dc001671dee1b7e0615cde772e84b01fbf68ee84
MD5 bd3768050d8c07e882b6213f9e3224ae
BLAKE2b-256 2401a4034a94a5f1828eb050230e7cf13af3ac23cf763512b6afe008d3def97c

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-manylinux2014_s390x.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-py3-none-manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 f8affdf3c0f0466e69f5b3917cdd042f89c8c63aebdb9f7c078996f607cdb0f5
MD5 04bbd050d5b66b00cd113d30ea4654bf
BLAKE2b-256 2a094b07dc8dd1a9f67a7acfbc084f26fc35ee8a2e4feeb0a2c98fe9a1ef196c

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-py3-none-manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 f27279d060e2ab24c0aa98363ff906d2386aa6c4dc2f1a374655d4e02a6c5e5e
MD5 4869fa6ce1763a51fcfaea1f3b0394c1
BLAKE2b-256 b0d57285d52e7a7ffce2ae0b21a98dbbed345bcb227672a4268eb26d046d8d41

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-py3-none-manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 6e8c70d2cd745daec2a08734d9f63092b793ad97612470a0ee4cbb8f5f705c57
MD5 d18edea0f5d02624505a4b245a1c5b0a
BLAKE2b-256 cedfc8719022af772d9f75f1c49af453a48a785a45295bca1ce4f3f55b9923af

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-manylinux2014_i686.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-py3-none-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 4107ac5ab936a63952dea2a46a734a23230aa2f6f9db1291bf171dac3ebd53c6
MD5 346bc369a77989e9320922f0196c2df7
BLAKE2b-256 c3bb1fac328ba90ea091ef04e7bdefe638a933076530d802c1b1cf1f03fe7e89

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-py3-none-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 4513ec234c68b14d4161440e07f995f231be21a09329051e67a2118a7a612d2d
MD5 15fb1b6ceac2451fca4779a1cf744e5b
BLAKE2b-256 057befc5b4134c97f08b161faa703327cde3fe647c5c48c156fde0c343471095

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dddba7ca1c807045323b6af4ff80f5ddc4d654c8bce8317dde1bd96b128ed253
MD5 d75f5df440e6aef5bef8eabeb85766b0
BLAKE2b-256 3a3628ce38b960f2bf1e1be573d85e8127c9ac66b4de63a7bef3f61b3f77ce57

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 998d2be6976a0ee3a81fb8e2777900c28641fb5bfbd0c84717d89bca0addcdc5
MD5 5ccc0aa2183bd17f3eb04ab18afff88a
BLAKE2b-256 45173e3b159ed0b5d9456d34420c8d0262e8dd0d7bd92cbf83f811a4ee03ca9b

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0144c0ea9997b92615af1d94afc0c217e07ce2c14912c7b1a5731776329fcfc7
MD5 4083676a2449b4ad7ee0c1f8f9f6b8c4
BLAKE2b-256 725904de07819896f834fc35d031a8d840516ada8ac7b1cefccd62b0ed8f4fc9

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ab998f567ebdf6b1da7dc1e5accfaa7c6992244629c0fdaef062f43249bd8dee
MD5 97f2446973c54f8523f019ea23ae4869
BLAKE2b-256 603431d20941af7ddd1ebb13b5349d8e0bafee164f024a025152aa43c690b2c9

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 bca36be5707e81b9e6ce3208d92d95540d4ca244c006b61511753583c81c70dd
MD5 c3463daa5b656c2f468ef1a54338f1f1
BLAKE2b-256 3a760c36f7097022470aa9fb9d090052970834f91e08b199c52791ca9772d156

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f0de0f284248ab40188f23380b03b59126d1479cd59940f2a34f8852db710625
MD5 242a7368a62d01f09f7ce8210171b1a3
BLAKE2b-256 1ff1e9199ba2a2617469daf40d89a938f488a381f406c64a92a4e1b7e53f7253

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e7921319fe4430b11278d924ef66d4daa469fafb1da679a2e48c935fa27af193
MD5 9e0da8edb3fe1265d81da10514bff4a9
BLAKE2b-256 591ce6e24e713cbfd5b36a29b3f634617552f7b606509b53ec1f8ef97b20de94

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 62c613ad689ddcb11707f030e722fa929f322ef7e4f18f5335d2b73c61a85c28
MD5 4059dd1f5f193bb08b5780ceaa214ce9
BLAKE2b-256 526762eea67ef31214ea4867b97351ea4f6b3a52dd1c4c93360ff8ad6e4ad72f

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 611be3904f9843f0529c35a3ff3fd617449463cb4b73b1633950b3d97fa4bfb7
MD5 c9cfdb0ab9decdf28c715935baa22ce3
BLAKE2b-256 a9eb8d1f9150dd5e86082913ab15d4fd4bea436186845be1b1752efd19b020d1

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 093b23e6906a8b97051191a4a0c73a77ecc958121d42346274c6af6520dec175
MD5 1c298bfe8b1247a3e429a25c4a685381
BLAKE2b-256 f3d185c1f5841190ee1e39f4a8a01df6eb13b44bd366060fc735505a38613484

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 123587af84260c991dc5f62a6e7ef3d1c57dfddc99faacee508c71d287248459
MD5 d1b09d1cc5c40898436afbc378b809e2
BLAKE2b-256 5aa572b9557e77ac3e6c41816fb16f643069b17cf21f745d26e2931cb1bf136c

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 03e70d2df2258fb6cb0e95bbdbe06c16e608af94a3ffbd2b90c3f1e83eb10767
MD5 4694b8bc9dce613ff0e64106a0d1059a
BLAKE2b-256 c2849c66fb603bb683fe559ceeba8f3d5dbea3293b631b2eba319d7d47a2d7fb

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 17e32f147d8bf9657e0922c0940bcde863b894cd871dbb694beb6704cfbd2fb5
MD5 9e3491ebcdc60479dc9149a83d5f1f7b
BLAKE2b-256 1cbca1ce8b77eede5a2f4fbcdc923079eb85b7c6e0f5e366ad06661b4dd807e1

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ef0107bbb6a55f5be727cfc2ef945d5676b97bffb8425650dadbb184be9f9a2b
MD5 ce3f96c9ed69b81442afdbedeec549cb
BLAKE2b-256 3ea565044f27764c6c93c7698a2a117ddb888a55a69222da3d6fe20c39cc087c

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e93f451f2dfa433d97765ca2634628b789b49ba8b504fdde5837cdcf25fdb53b
MD5 4ca1ee04234e53bd2948e5b771c5f819
BLAKE2b-256 1a3f4a4e866d69051d1144cbc5ebc11cdb5367b66d7ed6022bff1c7c927c3c1a

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 da2dfdaa8006eb6a71051795856bedd97e5b03e57da96f98e375682c48850645
MD5 a5b6a5270c7141449f6a0196c2328091
BLAKE2b-256 bb5111f6d62e07434849e47ab0ff90679443bd19c568118fbe47a1094ebcdca8

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d10a681c9a1d5a77e75c48a3b8e1a9f2ae2928eda463e8d33660437705659682
MD5 c95da2789a49422668a7a9b1f7d5dc95
BLAKE2b-256 cc082d2460ccea7dd8a70a0096aec93d5f5dbb0305e5bbbf9c913d2d2360ac68

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 667f3c579e813fcbad1b784db7a1aaa96524bed53437e119f6a2f5de4db04235
MD5 495aed0748d84c32e812b6730a91b672
BLAKE2b-256 d44f26652a5fdc0510e1c6c4a85b1dafc9e463c0db5bf74b166c0cd086e96b08

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c9904904b6564d4ee8a1ed820db76185a3c96e05560c776c79a6ce5ab71888ba
MD5 62fbbf64085ae0ef855d70b262dbf11d
BLAKE2b-256 23cdc9eba46749e703476d65d6292d6f6de1be776315b9106f3fa42998ff6844

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a3c2c317a8fb53e5b3d25790553796105501a235343f5d2bf23bb8649c2c8709
MD5 0a0b1ffb71f44ef9f447191614c73faf
BLAKE2b-256 d59462a6c6f53fee88ac8959ed418b45875fd649c63e09ed4c2afb08a3798b2a

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cad0bbd66cd59fc474b4a4376bc5ac3fc698723510cbb64091c2a793b18654db
MD5 5158f52fab8279e14232ac583dae43d2
BLAKE2b-256 84522f3bbdbf02dbaf5d3a200668e41c7b474c3b6dc37fc06597901730f56f50

See more details on using hashes here.

File details

Details for the file watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for watchdog-4.0.1-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d4925e4bf7b9bddd1c3de13c9b8a2cdb89a468f640e66fbfabaf735bd85b3e35
MD5 68d7e1c7adb274b7e516a33003d6bc95
BLAKE2b-256 f83544650dfdeb57337dc743b89990ccac5cab42ba865f1737b1b11ee9a76572

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page