postulo-apprise: notifications through Apprise, as the first plugin built outside the core #5
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Depends on
#4 A notification interface, with SMTP as the built-in notifier
Postulo/postulo
Reference
Postulo/postulo#5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Observation
Why Apprise
Apprise is a Python library (BSD-2-Clause) that delivers a message to well over a hundred services through one interface, each addressed by a URL:
tgram://bot-token/chat-id,ntfy://topic,discord://webhook,matrix://…,pover://…,gotify://…, and email among them. One plugin against it gives Postulo more notification channels than could sensibly be written by hand, and the person choosing a service configures it with one line.Shape
postulo-apprise, not a module inside Postulo. That is the point: it is the first plugin built outside the core, and it proves the notifier interface is real. Installing it isuv pip install postulo-appriseinto Postulo's environment and nothing else.apprisein thepostulo.notifiersgroup defined by #4.config_fields()asks for one or more Apprise URLs.send()builds anapprise.Apprise(), adds the URLs, and notifies.test()sends a hello.Apprise.add(), which rejects malformed ones, so a typo is caught at the form rather than at three in the morning when a reminder falls due.Secrets
Apprise URLs embed credentials — a Telegram bot token is right there in the scheme. Whatever #4 decides about encrypting channel configuration at rest applies here in full, and the interface must never render a stored URL back in full: show the service and a masked tail.
How plugins reach a container
This is the first plugin anyone will actually want inside the Docker image, which raises a question the image does not answer yet: how does an operator add packages? Options are a build argument listing extra packages, a requirements file read at build time, or a documented two-line
FROM postuloDockerfile. Worth settling here, because every later plugin has the same need.Classification
An enhancement. Not breaking: a separate package that changes nothing unless installed.
Depends on
#4 — the notifier interface and per-user channel storage. Nothing here can start until that exists, and building this is how that interface gets tested against something real.
Open questions
tiagoagueda/postulo-apprise) or an organisation for plugins?mailto://? Yes, per the observation — the core must work without any plugin installed — but worth writing down so nobody later "simplifies" it away.