def enqueue(self, tag, data, schedule = None, error_times=0, channel=None): with self.open(channel): self.setup_tag(tag) msg = Message() msg.properties['delivery_mode'] = 2 body = {'i': self.gensym(), 'c': data, 'e': error_times} id = None if schedule: ttl = round_by_accuracy(get_millis_to_the_date(schedule), self.SCHEDULING_ACCURACY) ttl1 = min(ttl, self.TTL_MAX) stag = ('%s.%s' % (self.get_tag(tag, 'SCHEDULE'), str(ttl1), )) self.channel.queue_declare( queue=stag, durable=True, auto_delete=False, arguments = { 'x-message-ttl' : ttl1, "x-dead-letter-exchange" : self.get_tag(tag, 'EXCHANGE') } ) body['s'] = schedule.strftime(self.TIME_FORMAT) msg.body = self.serializer(body) id = self.channel.basic_publish(msg, routing_key=stag) log(" [%s] Sent scheduled -> ttl: %s(%s) schedule: %s" % (body['i'], ttl1, ttl, body['s'], )) else: rtag = self.get_tag(tag, 'READY') msg.body = self.serializer(body) id = self.channel.basic_publish(msg, routing_key=rtag) log(" [%s] Sent immediate -> tag: %s" % (body['i'], rtag)) return body['i']
def check_proplist(self, msg): """ Check roundtrip processing of a single object """ raw_properties = msg._serialize_properties() new_msg = Message() new_msg._load_properties(raw_properties) new_msg.body = msg.body self.assertEqual(msg, new_msg)