43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""photo-pipeline: Apprise notification helper.
|
|
|
|
Posts to the self-hosted Apprise API server (fans out to all configured targets).
|
|
Usage: notify("Batch 3 done: 212 photos, 79 near-dups, 3 candidates")
|
|
|
|
The Apprise server holds the target config; we just POST title/body.
|
|
"""
|
|
|
|
import os
|
|
import subprocess
|
|
|
|
APPRISE_URL = os.environ.get("APPRISE_URL", "https://apprise.lab.audasmedia.com.au/notify")
|
|
|
|
|
|
def notify(title: str, body: str, tag: str = None) -> bool:
|
|
"""Send a notification via the Apprise API server. Returns success."""
|
|
import json
|
|
|
|
payload = {"title": title, "body": body}
|
|
if tag:
|
|
payload["tag"] = tag
|
|
|
|
r = subprocess.run(
|
|
["curl", "-s", "-o", "/dev/null", "-w", "%{http_code}",
|
|
"-X", "POST", APPRISE_URL,
|
|
"-H", "Content-Type: application/json",
|
|
"-d", json.dumps(payload)],
|
|
capture_output=True, text=True, timeout=30,
|
|
)
|
|
ok = r.stdout.strip() in ("204", "200")
|
|
print(f"[apprise] {title}: HTTP {r.stdout.strip()}")
|
|
return ok
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# CLI test: python apprise.py "title" "body"
|
|
import sys
|
|
|
|
t = sys.argv[1] if len(sys.argv) > 1 else "photo-pipeline test"
|
|
b = sys.argv[2] if len(sys.argv) > 2 else "Notification test from photo-pipeline"
|
|
ok = notify(t, b)
|
|
print("sent" if ok else "FAILED")
|