Message Translators

The message translator receives a “raw message” and process it to a suitable format expected by the handler.

The “raw message” is the message received by the provider “as-is” and it might be delivered without any processing if the message translator was not set.

In some cases, you should explicitly set message_translator=None to disable any configured translators.

Implementation

The message translator class should subclass AbstractMessageTranslator and implement the translate method like:

from loafer.message_translators import AbstractMessageTranslator


class MyMessageTranslator(AbstractMessageTranslator):

    def translate(self, message):
        return {'content': int(message), 'metadata': {}}

And it should return a dictionary in the format:

{'content': processed_message, 'metadata': {}}

The processed_message and metadata (optional) will be delivered to handler.

If processed_message is None (or empty) the message will cause ValueError exception.

All the exceptions in message translation will be caught by the configured Error Handlers.

The existing message translators are described below.

loafer.message_translators.StringMessageTranslator

A message translator that translates the given message to a string (python str).

loafer.ext.aws.message_translators.SQSMessageTranslator

A message translator that translates SQS messages. The expected message body is a json payload that will be decoded with json.loads.

All the keys will be kept in metadata key dict (except Body that was previously translated).

loafer.ext.aws.message_translators.SNSMessageTranslator

A message translator that translates SQS messages that came from SNS topic. The expected notification message is a json payload that will be decoded with json.loads.

SNS notifications wraps (and encodes) the message inside the body of a SQS message, so the SQSMessageTranslator will fail to properly translate those messages (or at least, fail to translate to the expected format).

All the keys will be kept in metadata key dict (except Body).

For more details about message translators usage, check the Routes examples.