Exemplo n.º 1
0
def test_abort_before_processing(
    stub_broker: dramatiq.Broker,
    stub_event_backend: EventBackend,
    mode: AbortMode,
) -> None:
    calls = []
    abortable = Abortable(backend=stub_event_backend)
    stub_broker.add_middleware(abortable)

    @dramatiq.actor(abortable=True, max_retries=0)
    def do_work() -> None:
        calls.append(1)

    stub_broker.emit_after("process_boot")

    # If I send it a message
    message = do_work.send()
    # And cancel right after.
    abort(message.message_id, mode=mode)

    # Then start the worker.
    worker = dramatiq.Worker(stub_broker, worker_timeout=100, worker_threads=1)
    worker.start()

    stub_broker.join(do_work.queue_name)
    worker.join()
    worker.stop()

    # I expect the task to not have been called.
    assert sum(calls) == 0
Exemplo n.º 2
0
def worker(broker: Broker) -> Generator[dramatiq.Worker, None, None]:
    worker = dramatiq.Worker(broker, worker_timeout=100)
    worker.start()

    yield worker

    worker.stop()
Exemplo n.º 3
0
def worker(broker):
    worker = dramatiq.Worker(broker, worker_threads=THREAD_COUNT)
    worker.start()
    try:
        yield worker
    finally:
        worker.stop()
Exemplo n.º 4
0
def test_add_middleware(app, broker, run_mock):
    class TestMiddleware(Middleware):
        @property
        def actor_options(self):
            return {"test_option"}

        def after_process_message(self,
                                  broker,
                                  message,
                                  *,
                                  result=None,
                                  exception=None):
            run_mock()

    broker.add_middleware(TestMiddleware())

    @broker.actor(test_option=123)
    def task():
        pass

    broker.init_app(app)
    broker.add_middleware(TestMiddleware())
    assert task.options['test_option'] == 123
    task.send()
    worker = dramatiq.Worker(broker)
    worker.start()
    worker.join()
    assert run_mock.call_count == 2
Exemplo n.º 5
0
def stub_worker():
    broker = dramatiq.get_broker()
    worker = dramatiq.Worker(broker, worker_timeout=1000)
    worker.start()
    try:
        yield worker
    finally:
        worker.stop()
Exemplo n.º 6
0
def test_dramatiq_task(app, broker, dramatiq_task, run_mock):
    with pytest.raises(RuntimeError, match=r'init_app\(\) must be called'):
        dramatiq_task.send()
    broker.init_app(app)
    dramatiq_task.send()
    worker = dramatiq.Worker(broker)
    worker.start()
    worker.join()
    run_mock.assert_called_once()
Exemplo n.º 7
0
def test_immediate_init(app, run_mock):
    broker = StubBroker(app, config_prefix='IMMEDIATE_INIT_BROKER')

    @broker.actor
    def task():
        run_mock()

    task.send()
    worker = dramatiq.Worker(broker)
    worker.start()
    worker.join()
    run_mock.assert_called_once()
Exemplo n.º 8
0
def test_register_task_after_init(app, broker, run_mock):
    broker.init_app(app)

    @broker.actor
    def task(p1, p2):
        run_mock(p1, p2)

    task.send('param1', 'param2')
    worker = dramatiq.Worker(broker)
    worker.start()
    worker.join()
    run_mock.assert_called_once_with('param1', 'param2')
Exemplo n.º 9
0
def test_lazy_actor(app, run_mock):
    import dramatiq.brokers.stub
    broker = dramatiq.brokers.stub.StubBroker()

    @dramatiq.actor(actor_class=LazyActor, broker=broker)
    def task():
        run_mock()

    task.send()
    worker = dramatiq.Worker(broker)
    worker.start()
    worker.join()
    run_mock.assert_called_once()
Exemplo n.º 10
0
def main(args):
    broker = dramatiq.get_broker()
    broker.emit_after("process_boot")
    worker = dramatiq.Worker(broker, worker_threads=1)
    worker.start()

    while True:
        try:
            time.sleep(1)
        except KeyboardInterrupt:
            break

    worker.stop()
    broker.close()
Exemplo n.º 11
0
def test_flask_app_context(app, broker, run_mock):
    @broker.actor
    def task():
        assert app.config is flask.current_app.config
        run_mock()

    broker.init_app(app)
    assert [
        1 for m in broker.middleware
        if type(m).__name__ == 'AppContextMiddleware'
    ]
    task.send()
    worker = dramatiq.Worker(broker)
    worker.start()
    worker.join()
    run_mock.assert_called_once()
Exemplo n.º 12
0
    def setUp(self):
        super().setUp()
        self.TEST_USER_NAME = 'testuser'
        self.TEST_USER_PASSWORD = '******'
        # Create a user
        test_user1 = User.objects.create_user(
            username=self.TEST_USER_NAME,
            password=self.TEST_USER_PASSWORD,
        )
        test_user1.save()
        print(f'TEST USER {test_user1.username}')
        print(f'TEST USER {test_user1.id}')
        self.test_user = test_user1

        self.broker = dramatiq.get_broker()
        self.worker = dramatiq.Worker(self.broker, worker_timeout=100)
        self.worker.start()
Exemplo n.º 13
0
def test_generic_actor(app, broker, run_mock):
    class AbstractTask(dramatiq.GenericActor):
        class Meta:
            abstract = True

        def perform(self, arg):
            self.run(arg)

    class Task(AbstractTask):
        def run(self, arg):
            run_mock(arg)

    broker.init_app(app)
    Task.send('message')
    worker = dramatiq.Worker(broker)
    worker.start()
    worker.join()
    run_mock.assert_called_once_with('message')
Exemplo n.º 14
0
def stub_worker(monkeypatch, settings, _runner):
    if settings.JOEFLOW_TASK_RUNNER == "joeflow.runner.celery.task_runner":
        yield mock.Mock()
    else:
        import dramatiq

        broker = dramatiq.get_broker()
        broker.emit_after("process_boot")
        broker.flush_all()
        worker = dramatiq.Worker(broker, worker_timeout=100)
        worker.start()

        class Meta:
            @staticmethod
            def wait():
                broker.join(settings.JOEFLOW_CELERY_QUEUE_NAME, timeout=60000)
                worker.join()

        yield Meta
        worker.stop()
Exemplo n.º 15
0
def app_with_scout(config=None):
    """
    Context manager that configures a Dramatiq app with Scout middleware
    installed.
    """
    # Enable Scout by default in tests.
    if config is None:
        config = {"monitor": True}

    # Disable running the agent.
    config["core_agent_launch"] = False

    broker = StubBroker()
    broker.emit_after("process_boot")
    dramatiq.set_broker(broker)

    @dramatiq.actor(max_retries=0)
    def hello():
        return "Hello World!"

    @dramatiq.actor(max_retries=0)
    def fail():
        raise ValueError("BØØM!")  # non-ASCII

    worker = dramatiq.Worker(broker, worker_timeout=0)

    # Setup according to https://docs.scoutapm.com/#dramatiq
    Config.set(**config)
    broker.add_middleware(ScoutMiddleware(),
                          before=broker.middleware[0].__class__)
    worker.start()

    App = namedtuple("App", ["broker", "worker", "hello", "fail"])
    try:
        yield App(broker=broker, worker=worker, hello=hello, fail=fail)
    finally:
        worker.stop()
        # Reset Scout configuration.
        Config.reset_all()
Exemplo n.º 16
0
def worker(broker):
    worker = dramatiq.Worker(broker, worker_timeout=100)
    worker.start()
    yield worker
    worker.stop()
Exemplo n.º 17
0
def worker(broker):
    worker = dramatiq.Worker(broker)
    worker.start()
    yield worker
    worker.stop()
Exemplo n.º 18
0
    def setUp(self):
        super().setUp()

        self.broker = dramatiq.get_broker()
        self.worker = dramatiq.Worker(self.broker, worker_timeout=100)
        self.worker.start()
Exemplo n.º 19
0
 def process_messages():
     worker = dramatiq.Worker(redis_broker)
     worker.start()
     redis_broker.join(throughput.queue_name)
     worker.stop()
Exemplo n.º 20
0
 def process_messages():
     worker = dramatiq.Worker(rabbitmq_broker)
     worker.start()
     rabbitmq_broker.join(rabbitmq_random_queue)
     worker.stop()