WebPush-Py
Simple library for working with WebPush
Usage
Installation
pip install webpush
Basic Usage
import requests
from webpush import WebPush, WebPushSubscription
from pathlib import Path
wp = WebPush(
private_key=Path("./private_key.pem"),
public_key=Path("./public_key.pem")
)
# example subscription info
subscription = WebPushSubscription.model_validate({
"endpoint": "https://fcm.googleapis.com/fcm/send/...",
"keys": {
"auth": "...",
"p256dh": "..."
}
})
message = wp.get(message='Hello, world!', subscription=subscription)
requests.post(subscription.endpoint, data=message.encrypted, headers=message.headers)
Generate VAPID keys and get applicationServerKey:
vapid-gen
Private key saved in public_key.pem and public key saved in public_key.pem.
Application Server Key saved in applicationServerKey
simple usage with fastapi
from pathlib import Path
import aiohttp
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from webpush import WebPush, WebPushSubscription
app = FastAPI()
wp = WebPush(
public_key=Path("./public_key.pem"),
private_key=Path("./private_key.pem"),
subscriber="admin@mail.com",
)
@app.get("/notification/key")
async def get_public_key() -> JSONResponse:
application_server_key = "<generated from vapid-gen>"
return JSONResponse(content={"public_key": application_server_key})
@app.post("/notification/subscribe")
async def subscribe_user(subscription: WebPushSubscription) -> JSONResponse:
message = wp.get(message="Hello, world", subscription=subscription)
async with aiohttp.ClientSession() as session:
await session.post(
url=str(subscription.endpoint),
data=message.encrypted,
headers=message.headers,
)
return JSONResponse(content={"status": "ok"})
More examples
- Web-Push-Notification-Minimal-Example by @nneskildsf
FAQ
- Why do I need another library?
The current python libraries that work with Web Push have been written for a very long time, so they do not support typing, try to support outdated encryption algorithms and pull a lot of deprecated dependencies.
- Why is only
aes128gcmsupported?
According to the RFC8192, this is the recommended format. At the moment, all modern systems support this encryption.
- Will there be support for other encryption modes?
New, yes, but there are no old ones, for example aesgcm
- Who is this library for?
You need type support, you're writing a modern backend, minimum number of dependencies.
And last one, if you have ideas for improvements, bug fixes, feel free to contribute.
Change log
- 1.0.0 - initial release
Credits
Metadata
Release files for webpush 1.0.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| webpush-1.0.6.tar.gz | 38.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| webpush-1.0.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.1 kB
Release files / webpush-1.0.6.tar.gz
| Download URL | webpush-1.0.6.tar.gz |
|---|---|
| Size | 38.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
62cd7cb7d09d81d8759635913ff4390001b31ae831b8351b6818767a5ef4659d
|
|
BLAKE2b-256 checksum How to use checksums |
b3a51ff5b2f17c9fe52e697cb153a7a3be32386c6d29aa893183ac5c1d6f0de5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.19
|
Release files / webpush-1.0.6-py3-none-any.whl
| Download URL | webpush-1.0.6-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
88103d23ccb4cd2474ca8de538277c239ada7d70ef1e70785ca7c568d9c49b0e
|
|
BLAKE2b-256 checksum How to use checksums |
47d4356b5d340d233f005d1ec43b30ee512c3096f88b12a3130e620af134363b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.8.19
|