from pydantic import BaseModel import sqlite3 from pywebpush import webpush from dotenv import load_dotenv from os import getenv class PushSubscriptionData(BaseModel): endpoint: str keys: object conn = sqlite3.connect("db.db", check_same_thread=False) cursor = conn.cursor() load_dotenv() PRIVATE_VAPID_KEY = getenv("PRIVATE_VAPID_KEY") cursor.execute(""" CREATE TABLE IF NOT EXISTS subscriptions ( endpoint TEXT PRIMARY KEY, keys_p256dh TEXT NOT NULL, keys_auth TEXT NOT NULL );""") # --- subscribe def subscribe(data: PushSubscriptionData): cursor.execute("SELECT * FROM subscriptions WHERE endpoint = ?", (data.endpoint,)) result = cursor.fetchall() if len(result) > 0: return data.endpoint cursor.execute(""" INSERT INTO subscriptions (endpoint, keys_p256dh, keys_auth) VALUES (?, ?, ?)""", (data.endpoint, data.keys["p256dh"], data.keys["auth"])) conn.commit() cursor.execute("SELECT * FROM subscriptions"); result = cursor.fetchall() for row in result: print(row) return data.endpoint # --- send notification # ---- not used yet def send_notification(endpoint: str): cursor.execute("SELECT * FROM subscriptions WHERE endpoint = ?", (endpoint,)) row = cursor.fetchall()[0] print(row) subscription_info = { "endpoint": endpoint, "keys": { "p256dh": row[1], "auth": row[2], }, } try: webpush( subscription_info=subscription_info, data={ "title": "Hello, world!", "body": "Hello, Victoria Hall!" }, vapid_private_key=PRIVATE_VAPID_KEY, vapid_claims={ "sub": "mailto:dev@altafcreator.com", }, ) except Exception as exception: print(exception)