Usage Guide

Callbacks

Callbacks are simple python functions that accept a single argument of type hedwig.models.Message -

def send_email(message: hedwig.models.Message) -> None:
    # send email

You can access the data dict using message.data as well as custom headers using message.headers and other metadata fields as described in the API docs: hedwig.models.Message().

Publisher

You can run publish messages like so:

models.Message.new(MessageType.my_message, StrictVersion('1.0'), data).publish()

If you want to include a custom headers with the message (for example, you can include a request_id field for cross-application tracing), you can pass in additional parameter headers.

Consumer

A consumer for SQS based workers can be started as following:

consumer.listen_for_messages()

This is a blocking function. Don’t use threads since this library is NOT guaranteed to be thread-safe.

A consumer for Lambda based workers can be started as following:

consumer.process_messages_for_lambda_consumer(lambda_event)

where lambda_event is the event provided by AWS to your Lambda function as described in lambda sns format.

Schema

The schema file must be a JSON-Schema draft v4 schema. There’s a few more restrictions in addition to being a valid schema:

  • There must be a top-level key called schemas. The value must be an object.
  • schemas: The keys of this object must be message types. The value must be an object.
  • schemas/<message_type>: The keys of this object must be major version patterns for this message type. The value must be an object.
  • schemas/<message_type>/<major_version>.*: This object must represent the data schema for given message type, and major version. Any minor version updates must be applied in-place, and must be non-breaking per semantic versioning.

Note that the schema file only contains definitions for major versions. This is by design since minor version MUST be backwards compatible.

Optionally, a key x-versions may be used to list full versions under a major version.

For an example, see test hedwig schema.

Testing

Hedwig supports pytest by default and provides pytest testing utilities as part of the hedwig.testing.pytest_plugin module.