Ce qui se passe
Apprise envoie une notification vers plus de 160 services — e-mail, messageries, SMS — avec une URL par destination et une syntaxe unique. On le croise dans des scripts, des tâches cron, derrière l'intégration Home Assistant, ou via Apprise API, son enveloppe REST. La version 2.0.0, en grande partie réécrite par son mainteneur Chris Caron, casse l'API Python sur plusieurs points.
Ce qui casse
notify() renvoie un objet AppriseResult. bool(result) donne toujours
True ou False, donc if apobj.notify(...) continue de marcher. En revanche
l'ancien None — aucun service ne correspondait au tag — devient False :
resultat = apobj.notify(body="Sauvegarde échouée")
if resultat is None: # v1 : aucun service pour ce tag
... # v2 : n'arrive plus, c'est FalseL'objet porte un journal et un statut par service, alignés sur les codes de
sortie de la CLI : SUCCESS (0), FAILURE (1), NOMATCH (3), et deux
nouveaux, PARTIAL (4) — une partie des services a échoué, là où la v1
répondait False — et TIMEOUT (5).
Les autres ruptures :
| Avant | Après |
|---|---|
APPRISE_CONFIG |
APPRISE_CONFIG_PATH (l'ancien nom avertit, pour l'instant) |
use_pgp= |
pgp_mode= |
?pgpkey= |
?pgppub= |
| paramètre d'URL inconnu ignoré | erreur explicite |
Toutes les erreurs héritent d'AppriseException, mais ValueError et
OSError restent levées là où elles l'étaient.
Ce qui arrive
Escalade. Un tag prend une priorité, 2:alerts : plus le chiffre est bas,
plus c'est urgent. --tag alerts prévient le niveau le plus urgent et ne
descend au suivant qu'en cas d'échec — le SMS seulement si l'e-mail n'est pas
passé.
Tentatives ciblées. ?retry= se souvient de ce qui est arrivé : si un
destinataire sur trois échoue, lui seul reçoit un nouvel envoi.
Délais. Plus d'attente infinie sur un serveur figé ; envoi parallèle par
défaut (--disable-async pour séquencer), et await apobj.async_notify() côté
Python.
# priorité 2 uniquement, jusqu'à trois tentatives
apprise -g "2:alerts:3" -b "Disque plein sur srv-01"
# 10 s pour tout le lot, 5 s par service (60 s par défaut)
apprise --tag alerts --limit 10 --service-limit 5 -b "Disque plein sur srv-01"Secrets hors fichier. Une configuration YAML peut contenir des
${NAME}, déclarés dans une section template:. La valeur vient de la ligne
de commande (--template-var api_key=…, ou -tv), d'une variable
APPRISE_TEMPLATE_API_KEY, d'une valeur par défaut, ou de l'API. Limites : ni
le schéma avant ://, ni les noms d'options ou de tags ne se remplacent, et le
format TEXT n'est pas concerné.
Côté sécurité, apprise:// ne met plus l'identifiant de configuration dans
l'URL — donc plus dans les journaux du serveur — et le masquage des valeurs
sensibles dans les logs est renforcé (CWE-312). Nouveaux services : Delta Chat,
WPUSH, YouLMK, Telnyx SMS.
Comment s'y prendre
Qui ne peut pas migrer tout de suite épingle la v1 :
pip install "apprise>=1.0.0,<2.0.0"La branche apprise-v1-release doit recevoir des correctifs de sécurité et de
bugs pendant un à deux ans, dans la mesure du possible selon son mainteneur.
Pour migrer :
chercher les is None sur le retour de notify(), les usages
d'APPRISE_CONFIG et des options PGP, puis tester les URL — celles qui
contenaient un paramètre fantaisiste vont désormais échouer.
Source (en allemand) : Der Universalbote für Admins: Apprise 2.0, heise Developer, 29 septembre 2026. Détail complet dans les notes de version v2.0.0.