Skip to main content

Spokestack Library for Python

Project description

Spokestack Python

GitHub license CircleCI PyPI version Coverage Status

Welcome to Spokestack Python! This library is intended for developing voice interfaces in Python. This can include anything from Raspberry Pi applications like traditional smart speakers to Django web applications. Anything built in Python can be given a voice interface.

Get Started

Installation with pip

Once system dependencies have been satisfied, you can install the library with the following.

pip install spokestack

Install Tensorflow

This library requires a way to run TFLite models. There are two ways to add this ability. The first is installing the full Tensorflow library.

The full Tensorflow package is installed with the following:

pip install tensorflow

TFLite Interpreter (Embedded Devices)

In use cases where you require a small footprint, such as on a Raspberry Pi or similar embedded devices, you will want to install the TFLite Interpreter.

pip install --extra-index-url https://google-coral.github.io/py-repo/ tflite_runtime

System Dependencies (Optional)

If you are unable to install the wheel, you may have to install some system dependencies for audio input and output.

macOS

brew install lame portaudio

Debian/Ubuntu

sudo apt-get install portaudio19-dev libmp3lame-dev

Windows

We currently do not support Windows 10 natively, and recommend you install Windows Subsystem for Linux (WSL) with the Debian dependencies. However, if you would like to work on native Windows support, we will gladly accept pull requests.

Another potential avenue for using spokestack on Windows 10 is from anaconda. This is without support for Text To Speech (TTS) though due to the Lame dependency. PortAudio, on the other hand, can be installed via conda.

conda install portaudio

Usage

Profiles

The quickest way to start using spokestack is by using one of the pre-configured pipeline instances. We offer several of these Profiles, which fit many general use cases.

from spokestack.profile.wakeword_asr import WakewordSpokestackASR


pipeline = WakewordSpokestackASR.create(
    "spokestack_id", "spokestack_secret", model_dir="path_to_wakeword_model"
)

Speech Pipeline

If you would like fine-grained control over what is included in the pipeline, you can use SpeechPipeline. This is the module that ties together VAD (voice activity detection), wakeword, and ASR (automated speech detection). The VAD listens to a frame of audio captured by the input device to determine if speech is present. If it is, the wakeword model processes subsequent frames of audio looking for the keyword it has been trained to recognize. If the keyword is found, the pipeline is activated and performs speech recognition, converting the subsequent audio into a transcript. The SpeechPipeline is initialized like this:

from spokestack.activation_timeout import ActivationTimeout
from spokestack.io.pyaudio import PyAudioInput
from spokestack.pipeline import SpeechPipeline
from spokestack.vad.webrtc import VoiceActivityDetector
from spokestack.wakeword.tflite import WakewordTrigger
from spokestack.asr.spokestack.speech_recognizer import SpeechRecognizer

mic = PyAudioInput()
vad = VoiceActivityDetector()
wake = WakewordTrigger("path_to_tflite_model")
asr = SpeechRecognizer("spokestack_id", "spokestack_secret")
timeout = ActivationTimeout()


pipeline = SpeechPipeline(mic, [vad, wake, asr, timeout])
pipeline.run()

Now that the pipeline is running, it becomes important to access the results from processes at certain events. For example, when speech is recognized there is a recognize event. These events allow code to be executed outside the pipeline in response. The process of registering a response is done with a pipeline callback, which we will cover in the next section.

Pipeline Callbacks

Pipeline callbacks allow additional code to be executed when a speech event is detected. For example, we can print when the pipeline is activated by registering a function with the pipeline.event decorator.

@pipeline.event
def on_activate(context):
    print(context.is_active)

One of the most important use cases for a pipeline callback is accessing the ASR transcript for additional processing by the NLU. The transcript is accessed with the following:

@pipeline.event
def on_recognize(context):
    print(context.transcript)

Natural Language Understanding (NLU)

Natural Language Understanding turns an utterance into structured data a machine can act on. For our purposes, this is joint intent detection and slot filling. You can read more about the concepts here. We like to think of intents as the action a user desires from an application, and slots as the optional arguments to fulfill the requested action. Our NLU model is initialized like this:

from spokestack.nlu.tflite import TFLiteNLU

nlu = TFLiteNLU("path_to_tflite_model")

Now that the NLU is initialized we can go ahead and add that part to the callback.

@pipeline.event
def on_recognize(context):
    results = nlu(context.transcript)

Text To Speech (TTS)

Text To Speech, as the name implies, converts text into spoken audio. This the method for giving your application a voice. We provide one TTS voice for free when you sign up for a Spokestack account, but you can contact us to train a truly custom voice. The TTS API keys are the same as SpeechRecognizer. The basic TTS initialization is the following:

from spokestack.tts.manager import TextToSpeechManager
from spokestack.tts.clients.spokestack import TextToSpeechClient
from spokestack.io.pyaudio import PyAudioOutput

client = TextToSpeechClient("spokestack_id", "spokestack_secret")
output = PyAudioOutput()
manager = TextToSpeechManager(client, output)
manager.synthesize("welcome to spokestack")

To demonstrate a simple TTS callback let's set up something that reads back what the ASR recognized:

@pipeline.event
def on_recognize(context):
    manager.synthesize(context.transcript)

Documentation

Build the docs

From the root project directory:

cd docs
make clean && make html

Deployment

This project is distributed using PyPI. The following is the command to build for installation.

python setup.py clean --all; rm -r ./dist
python setup.py sdist bdist_wheel

Twine is used to upload the wheel and source distribution.

twine upload dist/*

License

Copyright 2021 Spokestack, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License here

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Project details


Download files

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

Source Distribution

spokestack-0.0.22.tar.gz (1.8 MB view details)

Uploaded Source

Built Distributions

spokestack-0.0.22-pp37-pypy37_pp73-win32.whl (160.6 kB view details)

Uploaded PyPy Windows x86

spokestack-0.0.22-pp37-pypy37_pp73-manylinux2010_x86_64.whl (249.0 kB view details)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

spokestack-0.0.22-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (249.6 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

spokestack-0.0.22-pp36-pypy36_pp73-win32.whl (160.6 kB view details)

Uploaded PyPy Windows x86

spokestack-0.0.22-pp36-pypy36_pp73-manylinux2010_x86_64.whl (249.0 kB view details)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

spokestack-0.0.22-pp36-pypy36_pp73-macosx_10_9_x86_64.whl (249.5 kB view details)

Uploaded PyPy macOS 10.9+ x86-64

spokestack-0.0.22-cp39-cp39-win_amd64.whl (185.3 kB view details)

Uploaded CPython 3.9 Windows x86-64

spokestack-0.0.22-cp39-cp39-win32.whl (167.4 kB view details)

Uploaded CPython 3.9 Windows x86

spokestack-0.0.22-cp39-cp39-manylinux2010_x86_64.whl (795.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

spokestack-0.0.22-cp39-cp39-manylinux2010_i686.whl (706.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

spokestack-0.0.22-cp39-cp39-manylinux1_x86_64.whl (795.9 kB view details)

Uploaded CPython 3.9

spokestack-0.0.22-cp39-cp39-manylinux1_i686.whl (706.6 kB view details)

Uploaded CPython 3.9

spokestack-0.0.22-cp39-cp39-macosx_10_9_x86_64.whl (284.1 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

spokestack-0.0.22-cp38-cp38-win_amd64.whl (185.5 kB view details)

Uploaded CPython 3.8 Windows x86-64

spokestack-0.0.22-cp38-cp38-win32.whl (167.4 kB view details)

Uploaded CPython 3.8 Windows x86

spokestack-0.0.22-cp38-cp38-manylinux2010_x86_64.whl (797.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

spokestack-0.0.22-cp38-cp38-manylinux2010_i686.whl (710.2 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

spokestack-0.0.22-cp38-cp38-manylinux1_x86_64.whl (797.2 kB view details)

Uploaded CPython 3.8

spokestack-0.0.22-cp38-cp38-manylinux1_i686.whl (710.2 kB view details)

Uploaded CPython 3.8

spokestack-0.0.22-cp38-cp38-macosx_10_9_x86_64.whl (283.9 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

spokestack-0.0.22-cp37-cp37m-win_amd64.whl (185.0 kB view details)

Uploaded CPython 3.7m Windows x86-64

spokestack-0.0.22-cp37-cp37m-win32.whl (166.8 kB view details)

Uploaded CPython 3.7m Windows x86

spokestack-0.0.22-cp37-cp37m-manylinux2010_x86_64.whl (784.4 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

spokestack-0.0.22-cp37-cp37m-manylinux2010_i686.whl (699.9 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

spokestack-0.0.22-cp37-cp37m-manylinux1_x86_64.whl (784.4 kB view details)

Uploaded CPython 3.7m

spokestack-0.0.22-cp37-cp37m-manylinux1_i686.whl (699.9 kB view details)

Uploaded CPython 3.7m

spokestack-0.0.22-cp37-cp37m-macosx_10_9_x86_64.whl (283.5 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

spokestack-0.0.22-cp36-cp36m-win_amd64.whl (185.5 kB view details)

Uploaded CPython 3.6m Windows x86-64

spokestack-0.0.22-cp36-cp36m-win32.whl (167.1 kB view details)

Uploaded CPython 3.6m Windows x86

spokestack-0.0.22-cp36-cp36m-manylinux2010_x86_64.whl (783.9 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

spokestack-0.0.22-cp36-cp36m-manylinux2010_i686.whl (698.3 kB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

spokestack-0.0.22-cp36-cp36m-manylinux1_x86_64.whl (783.9 kB view details)

Uploaded CPython 3.6m

spokestack-0.0.22-cp36-cp36m-manylinux1_i686.whl (698.3 kB view details)

Uploaded CPython 3.6m

spokestack-0.0.22-cp36-cp36m-macosx_10_9_x86_64.whl (283.7 kB view details)

Uploaded CPython 3.6m macOS 10.9+ x86-64

File details

Details for the file spokestack-0.0.22.tar.gz.

File metadata

  • Download URL: spokestack-0.0.22.tar.gz
  • Upload date:
  • Size: 1.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22.tar.gz
Algorithm Hash digest
SHA256 68c422eaf1bf439a791bf23e3e62f4cf67b1e2c007ece91910af91971bd39689
MD5 581768485eabf163e96031a49ee402cd
BLAKE2b-256 e81151e7a250230a729864c8cbde9e403afb1e6c3c49f2eebfc70f0415869135

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp37-pypy37_pp73-win32.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp37-pypy37_pp73-win32.whl
  • Upload date:
  • Size: 160.6 kB
  • Tags: PyPy, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp37-pypy37_pp73-win32.whl
Algorithm Hash digest
SHA256 d8f89679f54df9cdffe1b7f7d79f3a5ed8f72c6661496961a2494ee1a63e3272
MD5 def0cb12ea3b303317ccb6480e20a1d4
BLAKE2b-256 36ee4d148b6c86cb2c7beab8e276752bcdaaf01fab9020abac135ae2c74dddf0

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp37-pypy37_pp73-manylinux2010_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp37-pypy37_pp73-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 249.0 kB
  • Tags: PyPy, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp37-pypy37_pp73-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 45ddbf4efbd78b6a138ae5ecfac82844b0ebb4a31aa7b06320c703ea44c6bdc4
MD5 ae7f838edbba8a9c3c72f8d11b7b7b9c
BLAKE2b-256 d139ba0c7073b2960c094ddf65805eb82a9ad57c429013302934233b4922ae1e

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp37-pypy37_pp73-manylinux1_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp37-pypy37_pp73-manylinux1_x86_64.whl
  • Upload date:
  • Size: 249.0 kB
  • Tags: PyPy
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp37-pypy37_pp73-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 041591fec13560b253580d422c02c837182dcc095a17ecfc5f457c418bbe84ac
MD5 88da5ac456752a672ac815e2b28f95cb
BLAKE2b-256 ba6242c04397959dddd821dc82e0bfa84c3c223e7ba7fd3ddc4be21704ca6e48

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 249.6 kB
  • Tags: PyPy, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0f44b618200f6d6ecb6a04abab471da012661807b2472c2133ff1d452df1739a
MD5 5071bcdb3d9c7b733a346d183e985352
BLAKE2b-256 0b414c0410db64937299f5d981cde320ec8ff5cd5afff1ca68b8f97fd38d31cc

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp36-pypy36_pp73-win32.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp36-pypy36_pp73-win32.whl
  • Upload date:
  • Size: 160.6 kB
  • Tags: PyPy, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp36-pypy36_pp73-win32.whl
Algorithm Hash digest
SHA256 0f4b55f066491c1f3048e03bc2693f15c51c007c8aa649aec726b57f81c04d2b
MD5 6b7a146775703d08dc16c5575b6f0b03
BLAKE2b-256 c1ce7229576448542def20b6fbddfa3c392bc4892d089ecf9800f3dd7514032b

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp36-pypy36_pp73-manylinux2010_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp36-pypy36_pp73-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 249.0 kB
  • Tags: PyPy, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp36-pypy36_pp73-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 484d48c589df8995e82004a08e52628ebdbea4e9ea7980feab1e585ccfdaf952
MD5 719553f0e05c0f7f200d4a068c0f082b
BLAKE2b-256 de0a66765f504a95887ce74103532de75d4bc746ad846cfdc14204241d19513a

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp36-pypy36_pp73-manylinux1_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp36-pypy36_pp73-manylinux1_x86_64.whl
  • Upload date:
  • Size: 249.0 kB
  • Tags: PyPy
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp36-pypy36_pp73-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 49320ea843dc13c1c77ad895c8ec575d287bb22a3ace0a2f8870e2dfb962cbde
MD5 24e276d4cd7b138f3915a8f1106cd83d
BLAKE2b-256 e119b3bedf4bd12a1407a383b6916820a62ebf24b683eded0740f0a90bc1b965

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-pp36-pypy36_pp73-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-pp36-pypy36_pp73-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 249.5 kB
  • Tags: PyPy, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-pp36-pypy36_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1ef06b2fe8e6c7a11c5574d5f5d6f43632408c632eca2950ca02f8a93b693759
MD5 ce8d52a0fcf02ce56e0c7f9edeebd2e3
BLAKE2b-256 93ada760d89e335c5d21b1568b8785a164edf9d1379f415a427111ca100ccaf2

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 185.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 2208dd2310b0e30eadb6128c3eb729e4d83563fbc2faa8b30c1daa80db0862f7
MD5 afd6e2cfe9a22c966a628fef1a6fa7f2
BLAKE2b-256 6e6ea79e3876806d1a138acf1cbd2c73cc73708b08a0c3259d005e4ede3a7aec

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp39-cp39-win32.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp39-cp39-win32.whl
  • Upload date:
  • Size: 167.4 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 52848c7a2341bcfd88eb8998ffe0e4090edfa53f96df8d81b142f1617e19e165
MD5 383782888f4e8ffc97098fc0c30fffc3
BLAKE2b-256 5a57a901e97c2e9256e327126584532c90d146e2a0717ec947659ba359984ef8

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp39-cp39-manylinux2010_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp39-cp39-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 795.9 kB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp39-cp39-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a2ac29fd520a26293573cc3d2c03c24f06263496ceba57ef62cd1e705003577c
MD5 95352c561d6ea10cd225bf74adfc9f46
BLAKE2b-256 a24e2b401fdeb8bf5efa4575b182c96192bc1da8dd09e3c84438527fcc0471a7

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp39-cp39-manylinux2010_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp39-cp39-manylinux2010_i686.whl
  • Upload date:
  • Size: 706.6 kB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp39-cp39-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 eee10d0511eda9d756923211efa48c53f863e33d644a48dc565e87740cee68c7
MD5 2d5d9245461c76ae00e31f6c4cee7e10
BLAKE2b-256 22ba2b67bbaafed77fbdb74c9267be05d40bb34a274af53088a96b9f890c1b85

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp39-cp39-manylinux1_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp39-cp39-manylinux1_x86_64.whl
  • Upload date:
  • Size: 795.9 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 dd5e08f39efe017347d65a190acf7361c00b45e75a698091ba521c41cc80ad70
MD5 e2a511566b9accd5882fb9cfdeca5a19
BLAKE2b-256 20c2f4e951b9ce41a68480e8474eb83b27f36fef46e8c2893a52684f024aada0

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp39-cp39-manylinux1_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp39-cp39-manylinux1_i686.whl
  • Upload date:
  • Size: 706.6 kB
  • Tags: CPython 3.9
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp39-cp39-manylinux1_i686.whl
Algorithm Hash digest
SHA256 e2358a63f57875778aba3ec9ca72ceb8cc5b400babb39da5a20458f1897a1f78
MD5 dbe33033ff721b511e24ff89f84ad0de
BLAKE2b-256 01669d70e2ec8c60d27ba915440c83308ac8294930c290074c5f1a1c2d176b27

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 284.1 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7bd83a1c3159d781ffdf11f18ea386e2d163956918d8f21353b991033bb416bb
MD5 3bd48c02266bbf10bccb7d0b77ef8146
BLAKE2b-256 bea24d7742aa7a660b87041d4d8e534021482b7780d81d9d697413694701b1d1

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 185.5 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 b9b74699a9cfbdaaddbd8a5d496d65c78dc92c38025d37b2fc07a0861f361bc2
MD5 d46705db453b9fe79c41143a4399a046
BLAKE2b-256 56199d9f3cdfd52907afebc90556b2cd484049438c6983334a5167e317a035cc

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp38-cp38-win32.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp38-cp38-win32.whl
  • Upload date:
  • Size: 167.4 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 ed0c09647217fffff5351ee9035cd5a51aa44c12e2e45959e62be634fea2f89c
MD5 060f599b339a6c4a3b1ad9639f62b69c
BLAKE2b-256 751307c32fe03edae0e20be0e3c9bd75f46499ba45168ce72c2eb248afd262d0

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 797.2 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 04f17e149c925b6e9f80dc710887e07ed84da69da6496f141046aa70c79c9a4d
MD5 9bff580905e9ba6ee625b6a6edbe6206
BLAKE2b-256 1dd79b064dc186676aa52e7b1818865c5146273fefffb7cb66bc1b8510f98704

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp38-cp38-manylinux2010_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp38-cp38-manylinux2010_i686.whl
  • Upload date:
  • Size: 710.2 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp38-cp38-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 be8e2354b00f27ed102548367331880c42cbbb94e9cde8cf2b840720ad8c3e70
MD5 92298952baa4e62eb522103c76e1362d
BLAKE2b-256 f93457887361d5036b2bff492ba6c5ca653c7d415d80bc741cbfc8eb2103c6fa

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 797.2 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 aa39283c7724238e10bbb881bed1e523b035ad668938125a9e72440bb3d14815
MD5 be6629cd7341e7b7aa2748f488c2009f
BLAKE2b-256 f7868e8a035356bad3cabe270ebd5c6c14898aa80feddb82f2dc604907953798

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp38-cp38-manylinux1_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp38-cp38-manylinux1_i686.whl
  • Upload date:
  • Size: 710.2 kB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp38-cp38-manylinux1_i686.whl
Algorithm Hash digest
SHA256 7a8e19458053b2ec361dc9a2c2127d80e43b5ac2e326501bbf8f0e2eb3c53714
MD5 6daac1cef43de819f136544a3c9f53dd
BLAKE2b-256 7bee5a2febf63e2c2f3b9153645d7de034d579d0a9464a50ee2e5aa31a2d953d

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 283.9 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 478f01fdf87fe94b2326dedfc76c27359fd886a1b1335bb50109cc2e82f9e5fc
MD5 09b8c27e254aab9eac47d4836272b08f
BLAKE2b-256 4878d3a19beb8e4e6f36eba05c077339d3b89d87b73fe90d249c75cd18a84f9e

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 185.0 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 b70ca8b7a4abe366ae36c3b5d6d66a95791bdcb52f6025f13b189d49197d6d7f
MD5 590038f62e5ea5c976748802c573ec95
BLAKE2b-256 bbac40acda22ade9da1da73982221237174a633e2713b75c53c186f25fe6333c

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp37-cp37m-win32.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 166.8 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 c6c547969b4ff48f8b06f7a5240ce4ddf3b040fe1658a2e866628a1e9831fb38
MD5 89cc039a898386a9305231d2bcf59f74
BLAKE2b-256 aa472bcbfedbbb3632a895a9332ac543e3f6bbd4a366b1b6f647ea0a3adee25b

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 784.4 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 21d7c051638a4fdc430e7060a0f46a4655e584d1138311ff34c122d47b68e8f7
MD5 aafcacf2e81b6d5882e9aabc672c6fd2
BLAKE2b-256 69a8482abfc9631d434f5bb4a52558a07795c59a6bec3cdc9be491ff064ef5ae

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp37-cp37m-manylinux2010_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp37-cp37m-manylinux2010_i686.whl
  • Upload date:
  • Size: 699.9 kB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp37-cp37m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 0eeceefb0f6b53c260344f68fe4e5fab2d1a60517b9a37841830fb15f0a057f2
MD5 d80eada753caa9c9d053400cc186d261
BLAKE2b-256 0349bd09f61b8bc26beb0ff6ad8c1a692b047ab75a4bae28bd7bca4a5b8c0e54

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 784.4 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 c8a3c309dccc26ffb9a61eeef23ed3d684bd85c9c5b5b3a91972f98769c8f018
MD5 1b033b73014812c22384533275115a01
BLAKE2b-256 dc0cf740c34f4199278a414b8fa4fff5c4b9c4abe4034522d24bfb705a3517fb

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 699.9 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 92d0c10d607bf33235bda0512370cf141414530b0c6adee92856b92eb5ff44ee
MD5 e657af305e5d7da59d0dafbd7b0412e7
BLAKE2b-256 73738d6dacca8a1bdbd2b8b6ae285b079eef7cc5da02de20e72de92b826a348a

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 283.5 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c158ef3fab79a4f76814dfb6eefa61ccab2ab05daf8b27edf4045f622da6852e
MD5 31a182bc614bfc8b403336966cb9c5da
BLAKE2b-256 695c71a15f653fc3b1a8a1acb9dd868625503a1c09ccc6925d982f426727730f

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 185.5 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 dbd065c5bfd304e943ced2dfd9bab84f7222ec1ea748953327749745ce949875
MD5 53ad62a5e9c6ee65be0ef159cfd4042c
BLAKE2b-256 535dbd4d279812968bed8655dd2f93b5725d81a5dfda2a537b7a038f2753f3de

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp36-cp36m-win32.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 167.1 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 6cded221fe2f45fb9b76ef76719a98d2e4382ca80f21604aff548b09d54bedec
MD5 25e703fec7e079d70d410a6748ee2a43
BLAKE2b-256 8502fdd0aea46f17ac16a03ae4a072c952f21b89e15a81e2c795659904a869ab

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 783.9 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 c708c4d61daa1941382840cd9f0610e18983e1921663c8e1cd6fc274ed22f432
MD5 bcf7797e893cadf521bc13340725b3a8
BLAKE2b-256 60c9bc33e13d2fe6a37eba72aeb296351dc4b0714b8e95b5f7b1758f18b1945e

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp36-cp36m-manylinux2010_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp36-cp36m-manylinux2010_i686.whl
  • Upload date:
  • Size: 698.3 kB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ i686
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp36-cp36m-manylinux2010_i686.whl
Algorithm Hash digest
SHA256 b36f9ce78fd9f869805ee5b5842473e7e14e6c58f1b1ce0c984aa2478565477c
MD5 789bcd137382f084b6a5014b503d7684
BLAKE2b-256 e8ef681667a5832dd443143b36f31ab6c9954f04b3454cc2acb7534c9f138918

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 783.9 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 932a86a76cbe1b3340221adbcb900660b464601812296409134074f58ab7a5c3
MD5 0265a6ed119d1748c1907669410a1d45
BLAKE2b-256 7b0fa3cf28fb94c3d63a94382724250a0339f4fafee66d24b0c47b0ba574ad69

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 698.3 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 23cabbfe74462798306b1b6b4955753f62488d064a760e10390d0f780a71ac1f
MD5 fcc2dc3ad72615d6bc23155d4127a752
BLAKE2b-256 792481255f6d210e260ccdd021eb051229e4a0cdc9566cfacbb1dee6aacd630c

See more details on using hashes here.

File details

Details for the file spokestack-0.0.22-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: spokestack-0.0.22-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 283.7 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.5.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.5

File hashes

Hashes for spokestack-0.0.22-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 61572e4039e6868187b4674cfd645506c74c0e22875a39a32c7c65292d621b60
MD5 49dbca6d2cf3b888aca3684ae194b219
BLAKE2b-256 3018489b51321f45f4a1e0f28265679f113c2e85ea6fb0e8e73b8313552e493a

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