Hem / Dokumentation / Python
Skicka push-aviseringar från Python
Lång träningskörning, nattlig ETL eller ett skript som ibland kraschar klockan 3 på natten? Skicka dig själv en iPhone-push från Python med ett enda requests.post till Pling-API:et. Nedan: en enradare, en återanvändbar hjälpfunktion, avisering vid undantag, en standardbiblioteksversion utan beroenden samt krokar för Django och Flask.
Den minimala versionen
Med requests är det ett enda anrop:
import requests
requests.post("https://api.plingpush.com/api/push", json={
"token": "YOUR_TOKEN",
"title": "Training finished",
"message": "epoch 50, val_acc 0.94",
"priority": "high",
})
En återanvändbar hjälpare
Läs token från miljön och kapsla in anropet så att resten av din kod hålls ren:
import os, requests
def pling(title, message="", priority="normal", url=None):
payload = {"token": os.environ["PLING_TOKEN"], "title": title,
"message": message, "priority": priority}
if url:
payload["url"] = url
requests.post("https://api.plingpush.com/api/push", json=payload, timeout=10)
pling("ETL complete", "12,418 rows loaded")
Avisera mig när den kraschar
Omslut jobbet, skicka undantaget och kasta om det så att dina loggar fortfarande får hela stackspårningen:
try:
run_nightly_job()
except Exception as e:
pling("Nightly job crashed", f"{type(e).__name__}: {e}", priority="high")
raise
Inga beroenden (standardbiblioteket)
Om du inte kan lägga till requests fungerar den inbyggda urllib överallt där Python gör det:
import json, os, urllib.request
def pling(title, message="", priority="normal"):
data = json.dumps({"token": os.environ["PLING_TOKEN"], "title": title,
"message": message, "priority": priority}).encode()
req = urllib.request.Request("https://api.plingpush.com/api/push", data=data,
headers={"Content-Type": "application/json"})
urllib.request.urlopen(req, timeout=10)
Felaviseringar för Django och Flask
Skicka serverfel till din telefon i samma ögonblick som de inträffar. I Flask:
@app.errorhandler(500)
def on_error(e):
pling("500 on the API", str(e), priority="high")
return "Internal Server Error", 500
I Django anropar du samma hjälpfunktion från en loggningshanterare eller en anpassad 500-vy, så att undantag i produktion når din telefon utan att behöva vänta på e-post.
Vanliga frågor
Behöver jag requests-biblioteket?
Nej. requests är det mest läsbara alternativet, men versionen med urllib.request från standardbiblioteket nedan har noll beroenden och är praktisk inuti Docker-avbildningar eller begränsade miljöer.
Hur blir jag pingad när mitt skript kraschar?
Omslut koden med try / except och anropa hjälpfunktionen från except-blocket med felets text, och kasta sedan om felet. Du får sammanfattningen av stackspårningen på din telefon och ser fortfarande hela kraschen i dina loggar.
Kan jag använda detta i Django eller Flask?
Ja. Anropa hjälpfunktionen från en Django-500-hanterare eller -signal, eller från en Flask-errorhandler, för att skicka serverfel till din telefon när de inträffar. Se exemplet nedan.
Var förvarar jag token?
Läs den från en miljövariabel som PLING_TOKEN i stället för att hårdkoda den, och håll den utanför versionshanteringen.
Fler recept: GitHub Actions · Cron-jobb · fullständig API-referens