Messages center

class bachata.BaseMessagesCenter(loop=None, proto=None, queue=None)[source]

Messages center provides top-level messages routing.

Parameters:
  • loop – asyncio event loop
  • queue – Messages queue instance
  • proto – Messages protocol instance or BaseProtocol instance will be used by default

Attributes:

  • .proto: BaseProtocol or subclass instance
  • .loop: asyncio event loop
  • .queue: BaseQueue subclass instance
  • .routes: routes objects list
add_route(route)[source]

Add messages route to routing chain, see BaseRoute

Message routes are processed in the same order as they added.

Parameters:route – Route instance
add_socket(channel, websocket)[source]

Register WebSocket for receiving messages from channel.

Parameters:
  • channel – String channel identifier, based on user id or some hash string
  • websocket – Tornado WebSocket handler instance
del_route(route)[source]

Remove message route, see BaseRoute

Parameters:route – Route instance
del_socket(channel, websocket)[source]

Unregister WebSocket from receiving messages from channel.

Parameters:
  • channel – String channel identifier, based on user id or some hash string
  • websocket – Tornado WebSocket handler instance
process(raw_or_message, websocket=None)[source]

Process message to routing chain and send to WebSockets.

Message is passed to registered routes, they return receivers channels and then message is sent to that channels.

Parameters:
  • raw_or_message – Raw message string or message dict
  • websocket – WebSocket connection handler received new message, this is optional parameter, because message could also be created at server internally
transport(message=None, websocket=None)[source]

Process transport layer for messages.

Performs reliable delivery process, notifies sender on successful message delivery.

Parameters:
  • message – Data or transport message to process
  • websocket – WebSocket which has received message to process

Routing

class bachata.BaseRoute[source]

Base messages route class.

Routes are registered in messages center, every route is responsible for delivering single messages type, i.e. direct users messages, group chat messages, system notifications, etc.

post_process(message, to_channel=None, queue=None)[source]

Post process message after putting it on delivery queue.

Scenarios examples:

  • Test if message was delivered after certain timeout and notify via another channel (email, APNS, SMS) if not.
  • Send extra service message right after main message.
  • etc.
process(message, websocket=None, proto=None)[source]

Process message and return receiver channel for the message.

Scenarios:

  • If method returns None, message is simply passed to next router in chain.
  • If method returns non-empty channel string, then message will be sent to that channel.
  • If method returns True, then routing chain should be stopped for this message.
Parameters:
  • message – Arbitrary message object.
  • proto – Messages protocol instance
Returns:

String channel identifier or True or None

Queue

class bachata.BaseQueue[source]

Base messages queue class.

add_socket(channel, websocket, proto=None)[source]

Register WebSocket for receiving messages from channel.

Method implementation has to write ‘ready’ transport message on success or close WebSocket connection.

Parameters:
  • channel – String channel identifier, based on user id or some hash string
  • websocket – Tornado WebSocket handler instance
check_delivered(channel, message_id)[source]

Check if message is delivered.

Default implementation always returns True, assuming no messages tracking is implemented initially.

del_socket(channel, websocket, proto=None)[source]

Unregister WebSocket from receiving messages from channel.

Parameters:
  • channel – String channel identifier, based on user id or some hash string
  • websocket – Tornado WebSocket handler instance
  • proto – Messages protocol instance
pop_delivered(channel, message_id, proto=None)[source]

Mark message as delivered by ID.

Default implementation is empty.

Parameters:
  • channel – Channel reveived message
  • message_id – Message ID
  • proto – Messages protocol instance
put_message(channels, message, proto=None, from_channel=None)[source]

Put messages on queue.

Parameters:
  • channels – List of destination channels
  • message – Message dict object
  • proto – Messages protocol instance
  • from_channel – Message from channel