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.