def test_actors_can_be_sent_messages(stub_broker): # Given that I have an actor @dramatiq.actor def add(x, y): return x + y # If I send it a message, # I expect it to enqueue a message enqueued_message = add.send(1, 2) enqueued_message_data = stub_broker.queues["default"].get(timeout=1) assert enqueued_message == Message.decode(enqueued_message_data)
def lookups(self, request, model_admin): lookup_choices = set() messages = (Message.decode(bytes(encoded_message)) for encoded_message in model_admin.model.tasks.values_list( "message_data", flat=True)) for message in messages: choice = getattr(message, self.parameter_name) lookup_choices.add((choice, "{} (slow)".format(choice))) return sorted(lookup_choices)
def test_redis_messages_revived_on_maintenance(redis_broker, redis_worker): # Given that I have an actor that takes a long time to run @dramatiq.actor def do_work(): time.sleep(5) do_work.send() # When I kill the worker prematurely redis_worker.stop(timeout=1) # And maintenance runs for that actor's queue redis_broker.heartbeat_timeout = 0 redis_broker.maintenance_chance = MAINTENANCE_SCALE redis_broker.do_qsize(do_work.queue_name) # My message should have a revived key on it messages = redis_broker.do_fetch(do_work.queue_name, 1) assert len(messages) == 1 assert Message.decode(messages[0]).options["revives"] == 1 redis_worker.start() time.sleep(1) redis_worker.stop(timeout=1) # And maintenance runs for that actor"s queue redis_broker.heartbeat_timeout = 0 redis_broker.maintenance_chance = MAINTENANCE_SCALE redis_broker.do_qsize(do_work.queue_name) # My message should have a revived key on it messages = redis_broker.do_fetch(do_work.queue_name, 1) assert len(messages) == 1 assert Message.decode(messages[0]).options["revives"] == 2
def message(self): if django.VERSION[0] < 2: return Message.decode(self.message_data.tobytes()) return Message.decode(self.message_data)
def message(self): return Message.decode(bytes(self.message_data))