Extension Point : INotificationFormatter
Interface | INotificationFormatter | Since | 1.1.3 |
Module | trac.notification | Source | api.py |
The INotificationFormatter formats notification events to messages in various formats ready to be distributed.
Purpose
Trac provides an extendible and flexible notification system, that historically has sent plain text emails for ticket changes. Notifications of different event realms (e.g. wiki notifications), transports (e.g. SMS) and message formats (e.g. HTML messages) might all require different formatting logic though.
Usage
Implementing the interface follows the standard guidelines found in TracDev/ComponentArchitecture and of course TracDev/PluginDevelopment.
A simple get_supported_styles()
method lists the supported MIME types and event realms for a given transport.
The format()
method formats a notification event. It receives the following parameters:
transport
: The name of the transports that should be used. (See INotificationDistributor)style
: The style that should be used. One of those returned byget_supported_styles()
.event
: Atrac.notification.api.NotificationEvent
instance describing the event about which the recipients should be notified.
It should return the formatted message. The exact return type depends on the transport.
Examples
The following example formats notifications to a short string for distribution via SMS.
from trac.core import * from trac.notification.api import INotificationFormatter class ShortTicketNotificationFormatter(Component): implements(INotificationFormatter) # INotificationFormatter methods def get_supported_styles(self, transport): if transport == 'sms': yield ('text/plain', 'ticket') def format(self, transport, style, event): if transport == 'sms' and event.realm == 'ticket': return "#{0} {1} by {2}" % (event.target, event.category, event.author)
Available Implementations
Additional Information and References
- epydoc
- API Reference
- Related to the INotificationDistributor
History
- This interface originated in th:AnnouncerPlugin as
IAnnouncementFormatter
.
- 1.1.3: Integrated
INotificationFormatter
in Trac as part of this proposal (#3517)- Dropped the
alternative_style_for()
method. (The distributor can select fallbacks without this.) - Dropped the
realm
parameter to theformat()
method. (Useevent.realm
instead.) - Switched from
styles(transport, realm)
toget_supported_styles(transport)
- Dropped the