Generic Handlers

Here are some handlers that are easy to extend or use directly.

loafer.ext.aws.handlers.SQSHandler

A handler that publishes messages to a SQS queue.

For instance, if we just want just redirect a message to a queue named “my-queue”:

# in your route definition
from loafer.ext.aws.handlers import SQSHandler

Route(handler=SQSHandler('my-queue'), ...)

The handler assumes a message that could be json encoded (usually a python dict instance).

You can customize this handler by subclassing it:

class MyHandler(SQSHandler):
    queue_name = 'my-queue'

    async def handle(self, message, *args):
        text = message['text']
        return await self.publish(text, encoder=None)

In the example above, we are disabling the message encoding by passing None to the publish coroutine.

The encoder parameter should be a callable that receives the message to be encoded. By default, it assumes json.dumps.

Take a note how queue_name was set. You can configure it when instantiate the handler or set the class attribute queue_name, both are valid and the attribute is mandatory. You can also use the queue URL directly, if you prefer.

loafer.ext.aws.handlers.SNSHandler

A handler that publishes messages to a SNS topic.

This handler is very similar to SQSHandler, so going to a similar example:

from loafer.ext.aws.handlers import SNSHandler

class MyHandler(SNSHandler):
    topic = 'my-topic'

    async def handle(self, message, *args):
        text = message['text']
        return await self.publish(text, encoder=None)

The handler also provides a publish coroutine with an encoder parameter that works in the same way as with SQSHandler, except it will publish in a SNS topic instead a queue.

The SNSHandler also assumes a message that could be json encoded and the encoder default to json.dumps.

The topic is also mandatory and should be configured in the class definition or when creating the handler instance.

You can set either the topic name or the topic arn (recommended), but when using the topic name the handler will use wildcards to match the topic arn.

More details about SNS wildcards are available in their documentation.