A package for connecting to AWS AppSync WebSocket API using graphql subscriptions
Project description
AWS AppSync WebSocket Client
A Python client for subscribing to AWS AppSync GraphQL APIs via WebSockets. This package allows you to connect to the AWS AppSync WebSocket API, handle GraphQL subscriptions, and manage reconnections and retries seamlessly.
Features
- GraphQL Subscriptions: Easily subscribe to GraphQL queries over WebSockets.
- Automatic Reconnection: Handles reconnection attempts in case of dropped WebSocket connections.
- Thread-safe: Manages multiple subscriptions with thread-safe operations.
- Callback Handling: Provides a way to specify callback functions that process subscription data.
Installation
Install the package via pip:
pip install appsync-ws-client
Usage
1. Initialize the Client
To use the client, provide the WebSocket URL and an authentication function that returns the necessary headers.
from appsync_ws_client.client import GraphQLWebSocketClient
def get_auth_headers():
return {
"host": "xxx.appsync-api.<region>.amazonaws.com",
"Authorization": "<ACCESS_TOKEN>",
}
url = "wss://<your-appsync-endpoint>"
client = GraphQLWebSocketClient(url, auth_function=get_auth_headers)
client.connect()
2. Subscribing to a GraphQL Query
You can subscribe to a GraphQL query using the subscribe
method. The subscription requires a GraphQL query, variables (if any), and a callback function to handle the subscription data.
query = '''
subscription OnPriceUpdate {
onPriceUpdate {
id
price
timestamp
}
}
'''
def handle_subscription_data(data):
print("Received subscription data:", data)
subscription_id = client.subscribe(query, variables={}, callback=handle_subscription_data)
3. Unsubscribing
To unsubscribe from a subscription, use the unsubscribe
method with the subscription_id
that was returned when you subscribed.
client.unsubscribe(subscription_id)
4. Closing the Connection
Ensure you close the WebSocket connection properly when done:
client.close()
5. Handling Reconnection
The client automatically attempts to reconnect when a WebSocket connection drops. You can control the number of retry attempts by passing max_retries
to the client. For example:
client = GraphQLWebSocketClient(url, auth_function=get_auth_headers, max_retries=10)
client.connect()
Error Handling
The package will raise the following errors:
TimeoutError
: Raised when the connection acknowledgment times out.MaxRetriesExceeded
: Raised when the maximum number of reconnection attempts is exceeded.
You can also handle WebSocket errors using the client’s internal logging.
Logging
Logging is built in to help monitor the WebSocket connection and subscription process. Make sure to configure logging in your application as necessary:
import logging
logging.basicConfig(level=logging.INFO)
Example
Here is a full example of setting up the client and subscribing to a GraphQL subscription:
import time
import logging
from appsync_ws_client.client import GraphQLWebSocketClient
logging.basicConfig(level=logging.INFO)
def get_auth_headers():
return {
"host": "xxx.appsync-api.<region>.amazonaws.com",
"Authorization": "<ACCESS_TOKEN>",
}
url = "wss://<your-appsync-endpoint>"
client = GraphQLWebSocketClient(url, auth_function=get_auth_headers)
client.connect()
query = '''
subscription OnPriceUpdate {
onPriceUpdate {
id
price
timestamp
}
}
'''
def handle_subscription_data(data):
print("Received subscription data:", data)
subscription_id = client.subscribe(query, variables={}, callback=handle_subscription_data)
try:
while True:
time.sleep(1) # Keeps the main program alive
except KeyboardInterrupt:
print("Closing WebSocket and shutting down...")
client.close()
# Later, if you want to unsubscribe
client.unsubscribe(subscription_id)
# Always remember to close the connection when done
client.close()
License
This package is licensed under the MIT License. See the LICENSE file for more details.
Contributing
Feel free to open an issue or submit a pull request if you want to contribute!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file appsync_ws_client-0.1.1.tar.gz
.
File metadata
- Download URL: appsync_ws_client-0.1.1.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e38c087270352063e200f479b65c0234de8c73966abeff8ba8789302aa98349 |
|
MD5 | a24e36e3574a1d14045b1a63cc243ad8 |
|
BLAKE2b-256 | 9bf49d1057dfd33a588eab96f84111f9b1401230a2be1525450fd6cab8d973d2 |
File details
Details for the file appsync_ws_client-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: appsync_ws_client-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 279bc648896649ab71cb7352d141d1d5b423458c808b168243cec81807ecba50 |
|
MD5 | 987cb8467f05690b91271f37a42dcd3f |
|
BLAKE2b-256 | 07974d65d6f57e52f9a1a49044c41c6919a0ac4b76c7010ea25dd289da13f024 |