Source code for message

#! /usr/bin/env python
"""
Defines the message class which represents a single message. This class is
primarily to be used by the methods in the broker class.
You define a message by supplying selected arguments, for example

>>> msg = message(queue='queue_name', message='Hello World!')
>>> print(msg)
filename = None
id = None
message = Hello World!
priority = None
queue = queue_name
queue_number = None
requeue = None
timeout = None

"""

import json
import logging as log
import os

[docs]class message: """ Class to represent a single message """ def __init__(self, queue=None, message=None, timeout=None, id=None, priority=None, queue_number=None, filename=None, requeue=None, requeue_counter=None, requeue_limit=None): """ Initialize a message with the given parameters Args: queue: name of the queue the message belongs to message: the message text itself timeout: a custom timeout limit to be used when processing the message, in seconds id: randomly generated uuid for the message priority: a custom priority to be used when processing the message queue_number: the number in the queue the message has. This number determins the order of messages with the same priority level (the epoch time the message was created) filename: file name of the file containing this message requeue: if True, the message will be requeued with default priority after it expires. If set to an int, that will be used as a custom requeuing priority counter counts the number of times the message has been placed in queue. A list where the first number tells how many times the message has been processed and the second number defines how many times it should be processed at most (the default None means infinite) Returns: None """ log.debug('Initializing message object') self.message = message self.queue = queue self.timeout = timeout self.id = id self.priority = priority self.queue_number = queue_number self.filename = filename self.requeue = requeue self.requeue_counter = requeue_counter self.requeue_limit = requeue_limit
[docs] @classmethod def json2msg(self, package): """Converty a JSON object to a message object""" log.debug('Creating a message object from a JSON string') # if the package is a string, convert to dict if type(package) is str: package = json.loads(package) # create a new empty message and update its values new_msg = message() new_msg.__dict__.update(package) return new_msg
[docs] def msg2json(self): """Convert a message object to a JSON object""" log.debug('Creating a JSON string from a message object') return json.dumps(self.__dict__)
[docs] def update(self, package): """Update a message object with the parameters supplied by the package (dict)""" log.debug('Updating a message object') self.__dict__.update(package)
def __repr__(self): """Print the values of a message object""" log.debug('Printing a message object') # go throguh the variables and collect their names and values text = "" for key,val in sorted(self.__dict__.items()): text += '{} = {}{}'.format(key,val,os.linesep) return text.rstrip()