Esempio n. 1
0
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)
Esempio n. 2
0
    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)
Esempio n. 3
0
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
Esempio n. 4
0
 def message(self):
     if django.VERSION[0] < 2:
         return Message.decode(self.message_data.tobytes())
     return Message.decode(self.message_data)
Esempio n. 5
0
 def message(self):
     return Message.decode(bytes(self.message_data))