Skip to main content

Python client for webhook.site API

Project description

pywhook

pywhook is a Python client library for interacting with webhook.site, allowing you to easily create webhook tokens, receive requests, set custom responses, and manage webhook listeners asynchronously.

Features

  • Create and delete webhook tokens.
  • Retrieve requests received by a token.
  • Wait for incoming webhook requests.
  • Attach callbacks that trigger on new requests.
  • Customize default responses.
  • Thread-safe listener management.
  • Context manager support for automatic cleanup.

Installation

pip install pywhook

Usage

All functionalities

from pywhook import Webhook 
import pprint
import time

pp = pprint.PrettyPrinter(indent=2)

# Create a new webhook token
print("Creating a new token...")
token_data = Webhook.create_token()
pp.pprint(token_data)

token_id = token_data.get("uuid")
if not token_id:
    print("Failed to create token. Exiting test.")
    exit(1)

# Initialize webhook instance
webhook = Webhook(token_id)
print(f"Using webhook URL: {webhook.url}")

# Get token details
print("\nGetting token details...")
details = webhook.get_token_details()
pp.pprint(details)

# Set a default response
print("\nSetting default response...")
resp = webhook.set_response(content="Hello from test!", status=201, content_type="text/plain")
pp.pprint(resp)

# Get URLs formats
print("\nWebhook URLs:")
for url in webhook.urls:
    print(url)

# Fetch requests (should be empty initially)
print("\nFetching requests...")
requests_list = webhook.get_requests()
pp.pprint(requests_list)

print("\nTesting wait_for_request (no exception expected)...")
print(webhook.wait_for_request(timeout=10))


# Test wait_for_request with a timeout (expect timeout error since no request will come)
print("\nTesting wait_for_request (expecting timeout)...")
try:
    webhook.wait_for_request(timeout=1)
except TimeoutError as e:
    print(f"Timeout as expected: {e}")

# Define a callback function for on_request
def my_callback(req):
    print("\nCallback triggered for new request:")
    pp.pprint(req)

# Start listening for new requests
print("\nStarting on_request listener thread (will listen for 5 seconds)...")
webhook.on_request(my_callback)

# Normally, here you would send a test request to webhook.url externally
# For testing, we just wait to simulate listening
time.sleep(5)

# Detach all callbacks (stop listening)
print("\nDetaching all callbacks...")
webhook.detach_all_callbacks()

# Finally, delete the token to clean up
print("\nDeleting token...")
webhook.delete_token()
print("Test complete. All tests passed. No issues present.")

Download a file sent via the webhook.

receiver.py
from pywhook import Webhook 

# Create the token
token_data = Webhook.create_token()

# Initialize webhook instance
webhook = Webhook(token_id)
print(f"Using webhook URL: {webhook.url}")

# Wait for the response that has the file attachment.
req = webhook.wait_for_request(timeout=60)

print("Received request:", req)

files = webhook.download_request_content(req)
print(f"Found {len(files)} file(s) attached.")

for key, file_data in files.items():
    ext = file_data["filename"].split(".")[-1]
    filename = f"downloaded_{key}.{ext}"
    with open(filename, "wb") as f:
        f.write(file_data["bytes"])
    print(f"Saved file {filename} ({file_data['size']} bytes)")

    # Clean up test files if you want
    os.remove(filename)
sender.py
#client.py
import requests

webhook_url = "https://webhook.site/uuid"

# Open the PNG file in binary mode
files = {"testkey1": ("temp.jpg", open("temp.jpg", "rb"), "image/jpg"),
         "testkey2": ("temp2.jpeg", open("temp2.jpeg", "rb"), "image/jpeg")}
    
response = requests.post(webhook_url, files=files)



print(f"Status code: {response.status_code}")
print("Response text:", response.text)

License

This project is licensed under the MIT License - see the LICENSE file for details.

Author

Ulus Vatansever (cvcvka5)

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

pywhook-1.1.0.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pywhook-1.1.0-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file pywhook-1.1.0.tar.gz.

File metadata

  • Download URL: pywhook-1.1.0.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for pywhook-1.1.0.tar.gz
Algorithm Hash digest
SHA256 ad36b6fcf5ca9aef3a32e5e3441717743fce82a31dfa5c608c0a2ede8821034e
MD5 1951fa2ebbf701cdd026c7667ad5cc58
BLAKE2b-256 66f2375e1b1e95fdde580b953c0fdda48ec0a52dd8b473a25ce04b0fa0b91af8

See more details on using hashes here.

File details

Details for the file pywhook-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: pywhook-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for pywhook-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b0e6bc5bacb05e4f5b2d563d9852471339259f8a02fb3b17f198b2e89f68acbc
MD5 f5cd8669e71045b9c7467a983e61d098
BLAKE2b-256 c34da44a646fe77a5b2882e1ac45ce69763c7273030fee9155aea2dd74cef7eb

See more details on using hashes here.

Supported by

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