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.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.0.tar.gz (126.4 kB view details)

Uploaded Source

Built Distributions

watchdog-4.0.0-py3-none-win_ia64.whl (82.9 kB view details)

Uploaded Python 3 Windows ia64

watchdog-4.0.0-py3-none-win_amd64.whl (82.9 kB view details)

Uploaded Python 3 Windows x86-64

watchdog-4.0.0-py3-none-win32.whl (82.9 kB view details)

Uploaded Python 3 Windows x86

watchdog-4.0.0-py3-none-manylinux2014_s390x.whl (82.9 kB view details)

Uploaded Python 3

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

Uploaded Python 3

watchdog-4.0.0-py3-none-manylinux2014_i686.whl (82.9 kB view details)

Uploaded Python 3

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

Uploaded PyPy macOS 10.9+ x86-64

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

Uploaded PyPy macOS 10.9+ x86-64

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

Uploaded PyPy macOS 10.9+ x86-64

watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl (93.2 kB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl (92.7 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl (102.1 kB view details)

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

watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl (93.2 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl (92.7 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl (102.1 kB view details)

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

watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl (93.2 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl (92.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl (102.1 kB view details)

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

watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl (93.2 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl (92.7 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl (102.1 kB view details)

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

watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl (93.2 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl (92.7 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl (102.1 kB view details)

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

File details

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

File metadata

  • Download URL: watchdog-4.0.0.tar.gz
  • Upload date:
  • Size: 126.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for watchdog-4.0.0.tar.gz
Algorithm Hash digest
SHA256 e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec
MD5 e1532758cd60a1474aa22a6d89572995
BLAKE2b-256 cd3c43eeaa9ea17a2657d639aa3827beaa77042809410f86fb76f0d0ea6a2102

See more details on using hashes here.

File details

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

File metadata

  • Download URL: watchdog-4.0.0-py3-none-win_ia64.whl
  • Upload date:
  • Size: 82.9 kB
  • Tags: Python 3, Windows ia64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for watchdog-4.0.0-py3-none-win_ia64.whl
Algorithm Hash digest
SHA256 9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7
MD5 cca74039e46bcfb19d2d165af0f06851
BLAKE2b-256 6cb9269c1e10115a4525feca2e90ccefcf45da22d750c5be74f0dfdb8d2920ee

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-4.0.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245
MD5 9cc75753698cbfd70280a4e7a4d837d6
BLAKE2b-256 d25c110884d0c632aedc54cdef5b7de3a78b388b03582e3ba57ae06c79db8b10

See more details on using hashes here.

File details

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

File metadata

  • Download URL: watchdog-4.0.0-py3-none-win32.whl
  • Upload date:
  • Size: 82.9 kB
  • Tags: Python 3, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for watchdog-4.0.0-py3-none-win32.whl
Algorithm Hash digest
SHA256 8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c
MD5 b03a2b6af5ff15eee2a9cf39e6b07c11
BLAKE2b-256 9e7f6f967900d3ec93bbd4719b38272c0377e67292424fb2e08b5da4c0a33398

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269
MD5 1d1771dbbc7c4df395c2a3285105f044
BLAKE2b-256 917b26d2f43aa9fe428416be21ee1cb9ac75638cf302466b7e706c14eeaea42c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-py3-none-manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87
MD5 299d3505c5d364419d220e3d162b9224
BLAKE2b-256 210f9c5429ae4547ec8c90dc009a5477735a5c3e5975ffc6eb69534d2bdb5365

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d
MD5 5d0db97204e8a2ae2171f0d650ae6ace
BLAKE2b-256 112a4139eed6a762cfe5cf98e1b0e8485ef5195cff60a02c69d8bbf3ec2ad279

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927
MD5 b63a550c029d7534425a0b988361086e
BLAKE2b-256 63b1c2d3778b2161e3f9de553ed038de7a565ecc9efcd448550efd4f3df5c5ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-py3-none-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50
MD5 4f0340330a773e2794b745dc7f8eb2c3
BLAKE2b-256 6c3fb24f8e098c2a8b6797448e33861990b8e3ef17f37789ec8eee9eccb4ce51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f
MD5 59dc5b02f912c40acd9c29530ba72329
BLAKE2b-256 c958f747fbcb87bec05f499efb5372b95cd6b18fa1df39ec49dc7a02005f8bef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3
MD5 4314fbd6dae4861e1cd8ec3e9a8efd8e
BLAKE2b-256 dd3db19ab5850a2c35d11cda16d132842314ae15f9bda5fafb93407ea396f74b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b
MD5 1a865b52e7235db62e91f61e279cbca8
BLAKE2b-256 589544de2764ae3944c2d7b8c12073a532d68c65734fe7438e5b23141f191259

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07
MD5 1938d0d488b9c8311f2f3518f4eff0ce
BLAKE2b-256 6259fcfc4e28a0bb0252ea8be6a8ebfe0bd81f0306ee38044bb804ba76a59158

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92
MD5 1be37e4006735f0c35cec72deb4d4cab
BLAKE2b-256 f0091ff2c9adc6267610ffc385ca2e3a80cd1fcacc47d9fe2eb22bcccb36e533

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b
MD5 2abaed46710836147d189535bac908fb
BLAKE2b-256 d1ebb815a1bd33a34d471d68e1f1833360af861a0a29cd5530b8d95fcf7bc6dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19
MD5 4b25d31a08b3403b91ef6a52ef52e878
BLAKE2b-256 1ea73de62a18e3e7d62fa958eea648db9f9bc7eeb5e53fe122874948582a6109

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257
MD5 fea4b2219dc4433d1cfcab6410b4f4bc
BLAKE2b-256 561f8d1f3db12eaa9686edc802a331c38d7187d3b77693b4f866b587db8f9f49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b
MD5 16c435ec0276186410563d28a06575f5
BLAKE2b-256 fb012275fe6a5598daf95b9e44cc10a4db642c637ae00986836478e01eaccb4f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935
MD5 f38146582da87033d9aeee98073699c8
BLAKE2b-256 7f9b04110f5c61fe2a90d5cccfc6445c8cce8c560c2fae236571c397b0dd68d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b
MD5 0d61a9e13a2a9e9642be9e4599bafb7c
BLAKE2b-256 876004c6ee1a950b8f193ad4a766dd0518663829dc64603699ab1ba2f53e78f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c
MD5 a4db93c2119c5bfe2181aa112e2166bb
BLAKE2b-256 9b44f260b0a0bb3ed4006fb1cde4a6cea5a877d1edd919f21db63573ed76f013

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b
MD5 eda91ffedb62de2d3508061f27cdf993
BLAKE2b-256 086459fe81b05b77e898e14c37e28c404923dbd282f49efc94b8927e28290ec6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b
MD5 d4bfa2a5b0901e5b8569d8dfe08a8171
BLAKE2b-256 f56f95ea970f73f934566e81f2d7bf497e6f982fd6b9427b3d927eb8e7e6dc1b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8
MD5 d73c4481564dcd5ef4d57896c0c7f97b
BLAKE2b-256 9f45a52b5e076a066d81b7ce39192f6e75c63e64a6119a760be10c418cd17da1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca
MD5 bb99849084c867fb16850dd1d1bc540e
BLAKE2b-256 9e1d6a9246415b13fd159ef1932ba1389ca42db9c6665ffe084ccbd9f2b474ba

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101
MD5 265a5b0d9f78bf9152cdaffb2349f7b2
BLAKE2b-256 913526105e0535459187a6038b5b9073bcbc9a963fae03d5e709c6ca2f92135a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605
MD5 5f798f8cde79a7a8c2376f550c0a5d73
BLAKE2b-256 9c374ce2f6793add2c7723b89669ca9310124c9f2fdb719a85ff2dc2373d30d1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4
MD5 239a28d8de49b94bbd3f0c6af5ff5243
BLAKE2b-256 0e68266581b54bcbed10009dd269cad574a798301eec3718306dbedf747029ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85
MD5 2e3a8bdda1a02ba23e2c55164c8cb0ba
BLAKE2b-256 768038e74a379bbdcbb62be4fc13f376c091b2713ae9277b0310e9cbd56cbbf9

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