From 9b09181e28a1662d06706f778778781078d5309e Mon Sep 17 00:00:00 2001 From: Snakes Date: Fri, 2 Dec 2022 18:15:41 -0500 Subject: [PATCH] Dispatch push notifications using greenlets. --- files/helpers/alerts.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/files/helpers/alerts.py b/files/helpers/alerts.py index a25279227..aec84e6e8 100644 --- a/files/helpers/alerts.py +++ b/files/helpers/alerts.py @@ -1,6 +1,7 @@ import json from sys import stdout +import gevent from flask import g from pywebpush import webpush @@ -114,16 +115,21 @@ def push_notif(uid, title, body, url): subscriptions = g.db.query(PushSubscription).filter_by(user_id=uid).all() for subscription in subscriptions: - try: - response = webpush( - subscription_info=json.loads(subscription.subscription_json), - data=json.dumps({ - "title": title, - "body": body, - 'url': url, - 'icon': f'{SITE_FULL}/icon.webp?v=1', - }), - vapid_private_key=VAPID_PRIVATE_KEY, - vapid_claims={"sub": f"mailto:{EMAIL}"} - ) - except: continue + gevent.spawn(_push_notif_thread, + subscription.subscription_json, title, body, url) + + +def _push_notif_thread(sub_json, title, body, url): + try: + response = webpush( + subscription_info=json.loads(sub_json), + data=json.dumps({ + "title": title, + "body": body, + 'url': url, + 'icon': f'{SITE_FULL}/icon.webp?v=1', + }), + vapid_private_key=VAPID_PRIVATE_KEY, + vapid_claims={"sub": f"mailto:{EMAIL}"} + ) + except: pass