release nouri 0.5.0 shopping rhythm pwa and reminders

This commit is contained in:
2026-04-12 16:39:04 +02:00
parent d8b56e6b67
commit 96ab52e1ba
37 changed files with 2199 additions and 285 deletions
+50
View File
@@ -0,0 +1,50 @@
from __future__ import annotations
import json
from typing import Any
from flask import current_app
def push_is_configured() -> bool:
return bool(
current_app.config.get("VAPID_PUBLIC_KEY")
and current_app.config.get("VAPID_PRIVATE_KEY")
and current_app.config.get("VAPID_SUBJECT")
)
def push_public_key() -> str | None:
return current_app.config.get("VAPID_PUBLIC_KEY") or None
def send_push_message(subscription: dict[str, Any], *, title: str, body: str, url: str) -> tuple[bool, str | None]:
if not push_is_configured():
return False, "Push ist noch nicht konfiguriert."
try:
from pywebpush import WebPushException, webpush
except Exception:
return False, "Die Push-Bibliothek ist noch nicht installiert."
payload = json.dumps(
{
"title": title,
"body": body,
"url": url,
"icon": "/static/brand/pwa-192.png",
"badge": "/static/brand/pwa-badge.png",
}
)
try:
webpush(
subscription_info=subscription,
data=payload,
vapid_private_key=current_app.config["VAPID_PRIVATE_KEY"],
vapid_claims={"sub": current_app.config["VAPID_SUBJECT"]},
)
except WebPushException as exc: # pragma: no cover - depends on live push endpoint
return False, str(exc)
return True, None