Messenger Framework
django_slack_tools.slack_messages.messenger
Messenger
Messenger class that sends message using templates and middlewares.
Components evaluated in order:
- Request processing middlewares
- Load template by key and render message in-place
- Send message
- Response processing middlewares (in reverse order)
Source code in django_slack_tools/slack_messages/messenger.py
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
|
__init__(*, template_loaders, middlewares, messaging_backend)
Initialize the Messenger.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
template_loaders
|
Sequence[BaseTemplateLoader]
|
A sequence of template loaders. It is tried in order to load the template and the first one that returns a template is used. |
required |
middlewares
|
Sequence[BaseMiddleware]
|
A sequence of middlewares. Middlewares are applied in the order they are provided for request, and in reverse order for response. |
required |
messaging_backend
|
BaseBackend
|
The messaging backend to be used. |
required |
Source code in django_slack_tools/slack_messages/messenger.py
_deliver_message(request)
Invoke the messaging backend to deliver the message.
Source code in django_slack_tools/slack_messages/messenger.py
_get_template(key)
Loads the template by key.
Source code in django_slack_tools/slack_messages/messenger.py
_process_request(request)
Processes the request with middlewares in forward order.
Source code in django_slack_tools/slack_messages/messenger.py
_process_response(response)
Processes the response with middlewares in reverse order.
Source code in django_slack_tools/slack_messages/messenger.py
_render_message(request)
Updates the request with rendered message, in-place.
Source code in django_slack_tools/slack_messages/messenger.py
send(to, *, template=None, context, header=None)
Simplified shortcut for .send_request()
.
Source code in django_slack_tools/slack_messages/messenger.py
send_request(request)
Sends a message request and processes the response.
Source code in django_slack_tools/slack_messages/messenger.py
django_slack_tools.slack_messages.backends
BaseBackend
Bases: ABC
Abstract base class for messaging backends.
Source code in django_slack_tools/slack_messages/backends/base.py
_send_message(*, channel, header, body)
abstractmethod
Internal implementation of actual 'send message' behavior.
deliver(request)
Deliver message request.
Source code in django_slack_tools/slack_messages/backends/base.py
DummyBackend
Bases: BaseBackend
An dummy backend that does nothing with message.
Source code in django_slack_tools/slack_messages/backends/dummy.py
LoggingBackend
Bases: DummyBackend
Backend that log the message rather than sending it.
Source code in django_slack_tools/slack_messages/backends/logging_.py
SlackBackend
Bases: BaseBackend
Backend actually sending the messages.
Source code in django_slack_tools/slack_messages/backends/slack.py
__init__(*, slack_app)
Initialize backend.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
slack_app
|
App | str
|
Slack app instance or import string. |
required |
Source code in django_slack_tools/slack_messages/backends/slack.py
SlackRedirectBackend
Bases: SlackBackend
Inherited Slack backend with redirection to specific channels.
Source code in django_slack_tools/slack_messages/backends/slack.py
__init__(*, slack_app, redirect_channel, inform_redirect=True)
Initialize backend.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
slack_app
|
App | str
|
Slack app instance or import string. |
required |
redirect_channel
|
str
|
Slack channel to redirect. |
required |
inform_redirect
|
bool
|
Whether to append an attachment informing that the message has been redirected.
Defaults to |
True
|
Source code in django_slack_tools/slack_messages/backends/slack.py
django_slack_tools.slack_messages.middlewares
BaseMiddleware
Base class for middleware components.
Source code in django_slack_tools/slack_messages/middlewares/base.py
process_request(request)
Process the incoming requests.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
request
|
MessageRequest
|
Message request. |
required |
Returns:
Type | Description |
---|---|
MessageRequest | None
|
MessageRequest objects or |
Source code in django_slack_tools/slack_messages/middlewares/base.py
process_response(response)
Processes a sequence of MessageResponse objects and returns the processed sequence.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
response
|
MessageResponse
|
Message response. |
required |
Returns:
Type | Description |
---|---|
MessageResponse | None
|
MessageResponse objects or |
Source code in django_slack_tools/slack_messages/middlewares/base.py
DjangoDatabasePersister
Bases: BaseMiddleware
Persist message history to database. If request is None
, will do nothing.
Source code in django_slack_tools/slack_messages/middlewares/django.py
__init__(*, slack_app=None, get_permalink=False)
Initialize the middleware.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
slack_app
|
App | None
|
Slack app instance to use for certain tasks, such as getting permalinks. |
None
|
get_permalink
|
bool
|
If |
False
|
Source code in django_slack_tools/slack_messages/middlewares/django.py
_get_permalink(*, channel, ts)
Get permalink of the message. It returns empty string on error.
Source code in django_slack_tools/slack_messages/middlewares/django.py
DjangoDatabasePolicyHandler
Bases: BaseMiddleware
Middleware to handle Slack messaging policies stored in the database.
Be cautious when using this middleware because it includes functionality to distribute messages to multiple recipients, which could lead to unwanted infinite loop or recursion if used improperly.
This middleware contains a secondary protection against infinite loops by injecting a context key to the message context. If the key is found in the context, the middleware will stop the message from being sent. So be careful when modifying the context.
Source code in django_slack_tools/slack_messages/middlewares/django.py
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 |
|
_RECURSION_DETECTION_CONTEXT_KEY = '__final__'
class-attribute
instance-attribute
Recursion detection key injected to message context for fanned-out messages to provide secondary protection against infinite loops.
messenger
property
Get the messenger instance. If it's a string, will get the messenger from the app settings.
__init__(*, messenger, on_policy_not_exists='error')
Initialize the middleware.
This middleware will load the policy from the database and send the message to all recipients.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
messenger
|
Messenger | str
|
Messenger instance or name to use for sending messages. The messenger instance should be different from the one used in the policy handler, because this middleware cannot properly handle fanned-out messages modified by this middleware. Also, there are chances of infinite loops if the same messenger is used. |
required |
on_policy_not_exists
|
OnPolicyNotExists
|
Action to take when policy is not found. |
'error'
|
Source code in django_slack_tools/slack_messages/middlewares/django.py
_create_policy(*, code)
Create a policy with the given code.
Policy created is disabled by default, thus no message will be sent. To modify the default policy creation behavior, simply override this method.
Source code in django_slack_tools/slack_messages/middlewares/django.py
_get_default_context(recipient)
Create default context for the recipient.
Source code in django_slack_tools/slack_messages/middlewares/django.py
_get_policy(*, code)
Get the policy for the given code.
Source code in django_slack_tools/slack_messages/middlewares/django.py
django_slack_tools.slack_messages.message_templates
BaseTemplate
Bases: ABC
, Generic[_T]
Base class for templates.
Source code in django_slack_tools/slack_messages/message_templates/base.py
DjangoTemplate
Bases: BaseTemplate
Template utilizing Django built-in template engine.
Source code in django_slack_tools/slack_messages/message_templates/django.py
__init__(*, file=None, inline=None, engine=None)
Initialize template.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
file
|
str | None
|
Path to file with template. |
None
|
inline
|
str | None
|
XML inline template. |
None
|
engine
|
BaseEngine | None
|
Template engine to use. Defaults to Django engine. |
None
|
Raises:
Type | Description |
---|---|
TypeError
|
Some of the arguments are missing or multiple are provided. |
Source code in django_slack_tools/slack_messages/message_templates/django.py
PythonTemplate
Bases: BaseTemplate[_PyObj]
Template that renders a dictionary.
Source code in django_slack_tools/slack_messages/message_templates/python.py
django_slack_tools.slack_messages.template_loaders
BaseTemplateLoader
Bases: ABC
Base class for template loaders.
Source code in django_slack_tools/slack_messages/template_loaders/base.py
DjangoPolicyTemplateLoader
Bases: BaseTemplateLoader
Django database-backed template loader.
Source code in django_slack_tools/slack_messages/template_loaders/django.py
_get_template_from_policy(policy_or_code)
Get template instance.
Source code in django_slack_tools/slack_messages/template_loaders/django.py
DjangoTemplateLoader
Bases: BaseTemplateLoader
Django filesystem-backed template loader.
Source code in django_slack_tools/slack_messages/template_loaders/django.py
__init__(*, engine=None)
Initialize template loader.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
engine
|
BaseEngine | None
|
Template engine to use. Defaults to Django engine. |
None
|
Source code in django_slack_tools/slack_messages/template_loaders/django.py
TemplateLoadError
TemplateNotFoundError
Bases: TemplateLoadError
Template not found error.