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

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

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

Uploaded Source

Built Distributions

watchdog-2.3.0-py3-none-win_ia64.whl (80.7 kB view details)

Uploaded Python 3 Windows ia64

watchdog-2.3.0-py3-none-win_amd64.whl (80.7 kB view details)

Uploaded Python 3 Windows x86-64

watchdog-2.3.0-py3-none-win32.whl (80.7 kB view details)

Uploaded Python 3 Windows x86

watchdog-2.3.0-py3-none-manylinux2014_x86_64.whl (80.7 kB view details)

Uploaded Python 3

watchdog-2.3.0-py3-none-manylinux2014_s390x.whl (80.7 kB view details)

Uploaded Python 3

watchdog-2.3.0-py3-none-manylinux2014_ppc64le.whl (80.7 kB view details)

Uploaded Python 3

watchdog-2.3.0-py3-none-manylinux2014_ppc64.whl (80.7 kB view details)

Uploaded Python 3

watchdog-2.3.0-py3-none-manylinux2014_i686.whl (80.7 kB view details)

Uploaded Python 3

watchdog-2.3.0-py3-none-manylinux2014_armv7l.whl (80.7 kB view details)

Uploaded Python 3

watchdog-2.3.0-py3-none-manylinux2014_aarch64.whl (80.7 kB view details)

Uploaded Python 3

watchdog-2.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (89.1 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-2.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (89.1 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-2.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (89.1 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

watchdog-2.3.0-cp311-cp311-macosx_11_0_arm64.whl (90.4 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

watchdog-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl (89.9 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

watchdog-2.3.0-cp311-cp311-macosx_10_9_universal2.whl (99.3 kB view details)

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

watchdog-2.3.0-cp310-cp310-macosx_11_0_arm64.whl (90.4 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

watchdog-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl (89.9 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

watchdog-2.3.0-cp310-cp310-macosx_10_9_universal2.whl (99.3 kB view details)

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

watchdog-2.3.0-cp39-cp39-macosx_11_0_arm64.whl (90.4 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

watchdog-2.3.0-cp39-cp39-macosx_10_9_x86_64.whl (89.9 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

watchdog-2.3.0-cp39-cp39-macosx_10_9_universal2.whl (99.3 kB view details)

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

watchdog-2.3.0-cp38-cp38-macosx_11_0_arm64.whl (90.4 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

watchdog-2.3.0-cp38-cp38-macosx_10_9_x86_64.whl (89.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

watchdog-2.3.0-cp38-cp38-macosx_10_9_universal2.whl (99.3 kB view details)

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

watchdog-2.3.0-cp37-cp37m-macosx_10_9_x86_64.whl (89.8 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

watchdog-2.3.0-cp36-cp36m-macosx_10_9_x86_64.whl (89.9 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.3.0.tar.gz
Algorithm Hash digest
SHA256 9d39effe6909be898ba3e7286a9e9b17a6a9f734fb1ef9dde3e9bb68715fca39
MD5 3cb9dc2594dfb458bede2879c5e9672e
BLAKE2b-256 d1776451ac9c31630bab57e4dcd25e701c379547ccc0974d7d6d94b97e46ca7f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.3.0-py3-none-win_ia64.whl
Algorithm Hash digest
SHA256 a3559ee82a10976de1ec544b6ebe3b4aa398d491860a283d80ec0f550076d068
MD5 ca979fe5907473a4bed5e3aab5131406
BLAKE2b-256 ce8b90c2611473594857c3548ad895dc8ca3dde0d5240b4f3ef01eb6c5bbeef9

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.3.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 6d79b5954db8f41d6a7f5763042b988f7a4afd40b7d141456061fa7c5b7f2159
MD5 277fb1acfeec88735d77e4c210161e5a
BLAKE2b-256 c2875d651cb0aab9a42b13e9a557021b6498ea45fc9f72ba6b37bbdbcffe907c

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for watchdog-2.3.0-py3-none-win32.whl
Algorithm Hash digest
SHA256 8863913ea2c3f256d18c33d84546518636e391cd8f50d209b9a31221e0f7d3fd
MD5 34b0878d58f4cce813696252040ce297
BLAKE2b-256 630da2d6bbdaf7ed3106c08fec63c8c52ae2954be12a6ed89aabdc8724a2c922

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7767a3da3307d9cf597832f692702441a97c259e5d0d560f2e57c43ad0d191d2
MD5 399d4d19179375b9530e6b3a6879a80b
BLAKE2b-256 c1d0cd7661148127d5dda9bffeb70777541a70623be1abdc9463e0a82aaca33d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-py3-none-manylinux2014_s390x.whl
Algorithm Hash digest
SHA256 45c13e7e6eea1013da419bf9aa9a8f5df7bbf3e5edce40bc6df84130febf39d5
MD5 490793d11eaa9168052b8c4116f6b748
BLAKE2b-256 35439e9574124a5ad06a750cab5dd136d029292c9cdd4c6aff046cee8f048562

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-py3-none-manylinux2014_ppc64le.whl
Algorithm Hash digest
SHA256 982f5416a2817003172994d865285dd6a2b3836f033cd3fa87d1a62096a162cc
MD5 dd0426f6a7d9bfadd3ecc7f1976d215a
BLAKE2b-256 6b83c75ebd2b910ad5c05dd36ba2aa90ac606ce57d4a6096dc7cdb078e157482

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-py3-none-manylinux2014_ppc64.whl
Algorithm Hash digest
SHA256 aa4773160b9cb21ba369cb42d59a947087330b3a02480173033a6a6cc137a510
MD5 81f73dedb8a60f5cca5a7cde11673f8c
BLAKE2b-256 30f7f4c709738f90093fb373e1d1e8a92e7eed7bf76cfcb0de01cfe9c13e2a66

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-py3-none-manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f1a655f4a49f9232311b9967f42cc2eaf43fd4903f3bed850dd4570fda5d5eff
MD5 24227533ed799aa702fd444dbd39193c
BLAKE2b-256 cfb04bc82402b2ef7aea5c14c6665222d6cb97ff4997d693e70d2ae45315e8f1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-py3-none-manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 00f93782c67042d9525ec51628330b5faf5fb84bcb7ebaac05ea8528cfb20bba
MD5 61083f3d87adc18fd76c435d625f24fd
BLAKE2b-256 8bc2b04ec91b447b9d34703f16d574215e4a7019496c3402899db7d9a35db0fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1d9c656495172873bf1ddc7e39e80055fcdd21c4608cf68f23a28116dcba0b43
MD5 decb59ff3119bc2efb72f396a0c9a6bb
BLAKE2b-256 e3cc3c5e4a97d67d6e7ae360891fc59db6c5faa8154c19b74cddc99cc4d027ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3fa1572f5a2f6d17d4d860edbc04488fef31b007c25c2f3b11203fb8179b7c67
MD5 67a5a49f1defbce19a383e111b0ee61c
BLAKE2b-256 84218bc45bc78cd19fdb677953667a620571eb335c9816e3e31a0d6e3d6cafc2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5ddbbe87f9ed726940d174076da030cd01ec45433ef2b1b2e6094c84f2af17f1
MD5 8b2d5f34513c7dd253672cedd229705b
BLAKE2b-256 eeedb47a369557d46e1dd336bf91733fba97416dbfa56e859606ed77876f78b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 43d76d7888b26850b908208bb82383a193e8b0f25d0abaa84452f191b4acdea4
MD5 17d4b267c2be310064ee069023cb3168
BLAKE2b-256 6dd4573e671e9b6ccd85116e45d5ec0a147718886366c183f9d536b5129a4a63

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 242e57253e84a736e6777ba756c48cf6a68d3d90cb9e01bd6bfd371a949ace3a
MD5 0fe854d432d2c14cb03ea4320803776c
BLAKE2b-256 973315911a569ab457f2b5957bf35799a35dfb01bf528e0a03fe140b57fbd115

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 a4b9bece40d46bf6fb8621817ea7d903eae2b9b3ebac55a51ed50354a79061a8
MD5 9d72101d8a6fa7ee7b97702a83b555ab
BLAKE2b-256 155f2a8f6de534f37f72f9863bee3ed4486b0bb961ada27c286a73f680a42fa0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 0f7d759299ce21a3d2a77e18d430c24811369c3432453701790acc6ff45a7101
MD5 da66bc92bbff7092456ce421589b998d
BLAKE2b-256 3b215fb0a410258319c95a57ddcab5a5f9cf7153599574b7f2b189dee959862d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d04662017efd00a014cff9068708e085d67f2fac43f48bbbb95a7f97490487f3
MD5 5a6358ed2d9ceda7838cfd96276cf8cc
BLAKE2b-256 d6a9c5ce07886321f043fcf58a72f20096cf72113b05d204a8efa06f5006f1e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9e651b4874477c1bf239417d43818bbfd047aaf641b029fa60d6f5109ede0db0
MD5 9f6b42cfb7e8dbef9d86b4a228b89212
BLAKE2b-256 379a1f557da8043665ab9ff90ecfa82ed3bdbf1278d6bbf7570a45fd9c4016ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c1b3962e5463a848ba2a342cb66c80251dca27a102933b8f38d231d2a9e5a543
MD5 1e22d0f641fbd427fbace0feb14b92f3
BLAKE2b-256 af75bcf697f8d8fb76b32a73434129de19bae1952df9005ea3a9a587faae6443

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a623de186477e9e05f8461087f856412eae5cd005cc4bcb232ed5c6f9a8709f5
MD5 eae4289bd365d0e4fbd351282e105997
BLAKE2b-256 b6a0bd2745231d42eeae6e7bd823cdb34bd5b68344c2f636f4faa11b5f9308ec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ebe756f788cb130fdc5c150ea8a4fda39cb4ee3a5873a345607c8b84fecf018b
MD5 41ba6b3ce14c76fcf47cf59ece0bb03e
BLAKE2b-256 a459dc9a8d393dc7d669331c2644405fc531df36004608cb0481ae2064d82bb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 473164a2de473f708ca194a992466eeefff73b58273bbb88e089c5a5a98fcda1
MD5 910b15f648091c498692acbc8545d79d
BLAKE2b-256 bd24bb8e0fc590a9b13cca9bb640fe9e63155cdb2579b8d6c626a964c23d4c9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4e648df44a4c6ea6da4d9eb6722745c986b9d70268f25ae60f140082d7c8908e
MD5 422029ccb756823fc976a232f154b1c7
BLAKE2b-256 2c83fd546dbc7bbb3e0f1ef67f9b643772589ac3f8d03dfb0833bfd08229b9c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8a214955769d2ef0f7aaa82f31863e3bdf6b083ce1b5f1c2e85cab0f66fba024
MD5 edda670ce89c1cc8864f2f5dbb30904b
BLAKE2b-256 38a5e734c6ca5a7c874b2bf767e1dc7fce2119cfe655157be72cbd66bbd0db09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 139262f678b4e6a7013261c772059bca358441de04fb0e0087489a34db9e3db0
MD5 fde2405976b8efee55653c2890c9710a
BLAKE2b-256 35338867a4798dc687e5db7040c7827e1c21188b6c20fc9495c2f684b4d8ae82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 15bf5b165d7a6b48265411dad74fb0d33053f8270eb6575faad0e016035cf9f7
MD5 0ec095e36be68fef69779806b90ba2c3
BLAKE2b-256 be705b249f88d4c4fa5235ef524c8591f2d186c611bb93946643eaca301936b5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for watchdog-2.3.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3fa74b0ef4825f9112932675a002296cb2d3d3e400d7a44c32fafd1ecc83ada0
MD5 beec5a6eda6c550d4769b3533c1ded1e
BLAKE2b-256 9c7b40a3746a9d748bc8dca805faccf95e427271c2fdeb88a3c402f135004853

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