ix-notifiers
A python library for sending one notification to several services at once.
Install
pip install ix-notifiers
Usage
Build a core, register the notifiers you want, then send. notify() returns True when
at least one channel accepted the notification.
from ix_notifiers import IxNotifiers
notifiers = IxNotifiers()
# Each keyword is prefixed with the name of the notifier it belongs to. The prefix is
# stripped before the notifier sees it, so `gotify_token` arrives as `token`.
notifiers.register(
"gotify",
gotify_url="https://gotify.example.com",
gotify_token="your-application-token",
gotify_default_priority=5,
)
notifiers.register("null")
notifiers.notify(title="Deploy", message="finished")
Every core holds its own registry, so two cores in one process do not see each other's notifiers. Registering a name no notifier answers to logs a warning and registers nothing.
Notifiers
Discovery is by filename: every *_notifier.py in the package is available under the
name in front of _notifier.
gotify
Posts to a Gotify server's /message endpoint.
| Parameter | Mandatory | Default | Description |
|---|---|---|---|
gotify_url |
yes | - | base URL of the Gotify server |
gotify_token |
yes | - | application token, kept out of the logs |
gotify_content_type |
no | text/markdown |
content type of the message body |
gotify_default_priority |
no | 0 |
priority for messages that carry none |
send() accepts title, message, priority and content_type. A field that is not
given is left out of the request, and content_type overrides the default for that one
message. A priority that will not convert to an integer is logged and the message is
sent without one.
null
Logs the notification at info level and reports success. Useful for a dry run.
Writing a notifier
Add a <name>_notifier.py to the package with a Notifier subclass, a params
declaration and a module-level start:
from typing import Any, ClassVar
from .notifier import Notifier
class WebhookNotifier(Notifier):
"""Posts a notification to a webhook."""
params: ClassVar[dict[str, dict[str, Any]]] = {
"url": {"mandatory": True, "type": "string"},
"secret": {"mandatory": True, "redact": True, "type": "string"},
"timeout": {"default": 10, "type": "integer"},
}
def send(self, **kwargs: Any) -> bool:
"""Sends the notification and reports whether it was accepted."""
...
start = WebhookNotifier.start
Each parameter declares a type of boolean, integer or string, and optionally
mandatory, default and redact. The base class resolves them into self.settings:
- a mandatory parameter has to be present, and a supplied
0,Falseor""counts as present - an optional parameter falls back to its
default, or toNonewhere it declares none - a value of the wrong declared type is rejected, and an integer parameter rejects a boolean
- a parameter marked
redacthas its value masked out of anything the notifier logs throughself.redact()
Logging
Every module logs to the ix-notifiers logger and attaches no handler of its own, so
the application decides where the records go.
Contributing
See CONTRIBUTING.md. Every change has to pass ruff check,
ruff format --check, pylint and the test suite at 100% statement and branch
coverage.
Metadata
Release files for ix-notifiers 2.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ix_notifiers-2.0.4.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ix_notifiers-2.0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.6 kB
Release files / ix_notifiers-2.0.4.tar.gz
| Download URL | ix_notifiers-2.0.4.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff117d28e2a9d966bc2cd8cee2ed49cd923813fb08c2be7a04e2f7ca58826f50
|
|
BLAKE2b-256 checksum How to use checksums |
5f3d368b40e6cbcae6166eb6cfffe7050b781d7bd2fec61f4622a21b01e5baf7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.3 CPython/3.14.5 Linux/7.0.0-28-generic
|
Release files / ix_notifiers-2.0.4-py3-none-any.whl
| Download URL | ix_notifiers-2.0.4-py3-none-any.whl |
|---|---|
| Size | 11.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1bd2957f4d6455f9b738bdb8598ae50ba7b4578b09f33995c3d6bcd7904b4009
|
|
BLAKE2b-256 checksum How to use checksums |
b647973bf069a7da6b799c54f68ad021f1a4e24b8a0c5839233e3bdc871bac7c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.3.3 CPython/3.14.5 Linux/7.0.0-28-generic
|