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.6+.

If you want to use Python 2.6, you should stick with watchdog < 0.10.0.

If you want to use Python 2.7, 3.4 or 3.5, you should stick with watchdog < 1.0.0.

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 '.'
    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 \
    .

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]"

Installation Caveats

The watchmedo script depends on PyYAML which links with LibYAML, which brings a performance boost to the PyYAML parser. However, installing LibYAML is optional but recommended. On macOS, you can use homebrew to install LibYAML:

$ brew install libyaml

On Linux, use your favorite package manager to install LibYAML. Here’s how you do it on Ubuntu:

$ sudo apt install libyaml-dev

On Windows, please install PyYAML using the binaries they provide.

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 the official mailing list or ask on 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.6 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

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

Uploaded Source

Built Distributions

watchdog-2.1.9-py3-none-win_ia64.whl (78.4 kB view details)

Uploaded Python 3 Windows ia64

watchdog-2.1.9-py3-none-win_amd64.whl (78.4 kB view details)

Uploaded Python 3 Windows x86-64

watchdog-2.1.9-py3-none-win32.whl (78.4 kB view details)

Uploaded Python 3 Windows x86

watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl (78.4 kB view details)

Uploaded Python 3

watchdog-2.1.9-py3-none-manylinux2014_s390x.whl (78.4 kB view details)

Uploaded Python 3

watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl (78.4 kB view details)

Uploaded Python 3

watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl (78.4 kB view details)

Uploaded Python 3

watchdog-2.1.9-py3-none-manylinux2014_i686.whl (78.4 kB view details)

Uploaded Python 3

watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl (78.4 kB view details)

Uploaded Python 3

watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl (78.4 kB view details)

Uploaded Python 3

watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (86.8 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (86.8 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (86.8 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl (88.0 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl (87.5 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl (96.9 kB view details)

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

watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl (88.0 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl (87.5 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl (96.9 kB view details)

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

watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl (88.0 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl (87.5 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl (96.8 kB view details)

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

watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl (87.4 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl (87.5 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.1.9.tar.gz
Algorithm Hash digest
SHA256 43ce20ebb36a51f21fa376f76d1d4692452b2527ccd601950d69ed36b9e21609
MD5 0e60e0a2d3a8c18ba37105f8b44de810
BLAKE2b-256 42f7da8e889f8626786eac9454e8d2718fc79359ed517be20cdd50c647167d39

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.1.9-py3-none-win_ia64.whl
Algorithm Hash digest
SHA256 ad576a565260d8f99d97f2e64b0f97a48228317095908568a9d5c786c829d428
MD5 c35be474d0e3c782d388ca26de1d5cb1
BLAKE2b-256 eb15e1a0c11f137fe05f593288fe735f8cd28c9b2f398e0c08623977dce81921

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.1.9-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 7a833211f49143c3d336729b0020ffd1274078e94b0ae42e22f596999f50279c
MD5 06a4df1d5174f18529f6a3dc5675cfc1
BLAKE2b-256 613fa2fc9452b8161862a78674fda583d8e1addbbecf57a1e172b4a7a96e8087

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.1.9-py3-none-win32.whl
Algorithm Hash digest
SHA256 5952135968519e2447a01875a6f5fc8c03190b24d14ee52b0f4b1682259520b1
MD5 ca8f1df08df6d96acbfbb201111cd225
BLAKE2b-256 ddd23470040cbf4abb86c173f60fe73f4b568cc4d37ea3d60d51795dd631afbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4f4e1c4aa54fb86316a62a87b3378c025e228178d55481d30d857c6c438897d6
MD5 dfb331fa75806bf8b173b122fafa0194
BLAKE2b-256 ffe0dad09238e32d161e332c2e94b367d2aaa5f2ffe3e240b49b70473979fd61

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-py3-none-manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 b530ae007a5f5d50b7fbba96634c7ee21abec70dc3e7f0233339c81943848dc1
MD5 8fa363029da87189491e9a943536619d
BLAKE2b-256 781031420ab66c13fc3de8f7f1d0e0e7736715a09242f280c66bf994f1fd1ed2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-py3-none-manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 083171652584e1b8829581f965b9b7723ca5f9a2cd7e20271edf264cfd7c1412
MD5 598681184a30c28c11452ea3640ce1c4
BLAKE2b-256 881d3f98cb264a3ec592a170e381acb27eeea5ad9c1dd0d881a3f853be27bd40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-py3-none-manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 186f6c55abc5e03872ae14c2f294a153ec7292f807af99f57611acc8caa75306
MD5 27bd1fd4ec597aba678537b44c7e3185
BLAKE2b-256 b81162bfa298f40d93b9846df38281a01ddc61c3567423c14c0a8eda6bf149df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-py3-none-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 d3dda00aca282b26194bdd0adec21e4c21e916956d972369359ba63ade616153
MD5 a5fa629ebdaf128b94312072b54690e8
BLAKE2b-256 53e04427a6c25d3a399bf30b9ab7a8d9aa438df4c460f5a094413c2dbd9ddb89

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-py3-none-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 255bb5758f7e89b1a13c05a5bceccec2219f8995a3a4c4d6968fe1de6a3b2892
MD5 bf1cd0e81fef18c7c526728f9d3166cc
BLAKE2b-256 c283a0f418e4106dc8f9bcb0eeb31d0a929607ae7274bc88d7ebf76767229a73

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9f05a5f7c12452f6a27203f76779ae3f46fa30f1dd833037ea8cbc2887c60213
MD5 70069d2c5c72638466c3680703f64591
BLAKE2b-256 97b3bb38d1606b0e9a112afc6323d833cedd95610dcf913ace7f77c673a971f5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ed80a1628cee19f5cfc6bb74e173f1b4189eb532e705e2a13e3250312a62e0c9
MD5 2d9baabfd4f2b0f98913df385474c48f
BLAKE2b-256 f850d5501772dfb710618540842bfd927ba8e643834129101db279b3b388f2cb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 70af927aa1613ded6a68089a9262a009fbdf819f46d09c1a908d4b36e1ba2b2d
MD5 6446c1f936351fc17a0f5a71eafa7783
BLAKE2b-256 d787e413b50aafb605eb8de68d8def72077e10842ad937d051976f0d01174305

See more details on using hashes here.

File details

Details for the file watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-2.1.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d9820fe47c20c13e3c9dd544d3706a2a26c02b2b43c993b62fcd8011bcc0adb3
MD5 2cd0ac801a629e4a9b26a11e4323970c
BLAKE2b-256 be0e7a151119ae2f86e3d64dbe439c8ad266d0a82e6a8dbb31b3392c4415045b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ee3e38a6cc050a8830089f79cbec8a3878ec2fe5160cdb2dc8ccb6def8552658
MD5 cb535fdeda42072748116cd1e9ebd067
BLAKE2b-256 72687da5b686038f00feadd411187b8ab17ea71c392bc400a4232502d9d341e9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6b17d302850c8d412784d9246cfe8d7e3af6bcd45f958abb2d08a6f8bedf695d
MD5 8909074b77666c6053dcaf56c14c4369
BLAKE2b-256 a1ba98ebdd44865c8dcb85d078e634f4f0b4ad1de021678f9707e1d04189b7a1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 a735a990a1095f75ca4f36ea2ef2752c99e6ee997c46b0de507ba40a09bf7330
MD5 5fcf3c9426b2bec8bff420591be718ae
BLAKE2b-256 7e72d042345ee9c36edb4fb92a8d1760b114729f9c86c704c7cf513b9e1269d8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 226b3c6c468ce72051a4c15a4cc2ef317c32590d82ba0b330403cafd98a62cfd
MD5 b63c5928346d78ae9eb353d2644f7abd
BLAKE2b-256 8336782ce92660031999f5c4dea12fa4ead53006f6569d00b253c38eb06742e3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 247dcf1df956daa24828bfea5a138d0e7a7c98b1a47cf1fa5b0c3c16241fcbb7
MD5 c30aca6732750c59222d098766f84371
BLAKE2b-256 d55f3a81d3cf23731f643f494a0a61d0b8392964bc6c3a8be9e7fb83dd727916

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 97f9752208f5154e9e7b76acc8c4f5a58801b338de2af14e7e181ee3b28a5d39
MD5 d53833b8f465eff95b009268b5be65f5
BLAKE2b-256 1b73034d5eeed680829769485e1cccbd094991599801647954c0f7b91cff81e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 117ffc6ec261639a0209a3252546b12800670d4bf5f84fbd355957a0595fe654
MD5 873c748326ff1c5140dfcdfc5c905f63
BLAKE2b-256 d7bce3e53e86eac881c9b07508f91f13a7c34a20c043d31820b567da44aedfd4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8250546a98388cbc00c3ee3cc5cf96799b5a595270dfcfa855491a64b86ef8c3
MD5 9a188daa2b28e17a52caf84c1da50e5f
BLAKE2b-256 6cd3e50abc33eff9cb1ee7ce6e7a9ce877c5c7a59f36171f20976b07a7036b85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.1.9-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 bfc4d351e6348d6ec51df007432e6fe80adb53fd41183716017026af03427846
MD5 f2f26ef58f6e6c9f744169e3a4b599ba
BLAKE2b-256 b656bc7f3d801a656d9b879cd5eec046cf3920494d650205ddc03fafc8268dcd

See more details on using hashes here.

File details

Details for the file watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-2.1.9-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 195fc70c6e41237362ba720e9aaf394f8178bfc7fa68207f112d108edef1af33
MD5 82af7e0c934e0a3318410f2c15f8ad54
BLAKE2b-256 196cc28d25371653ea4cb13f7a7d578ca30828eebeab845aacb2dfae8f8be147

See more details on using hashes here.

File details

Details for the file watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for watchdog-2.1.9-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 64a27aed691408a6abd83394b38503e8176f69031ca25d64131d8d640a307591
MD5 85aaabfb5feca954e7575d032962c538
BLAKE2b-256 904c225293bbb2249948950f95d168a776d3e0b6e9587c5906ae6d40d2b0df98

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