def stub_broker(): broker = StubBroker() broker.emit_after("process_boot") dramatiq.set_broker(broker) yield broker broker.flush_all() broker.close()
def broker(sentry_init): sentry_init(integrations=[DramatiqIntegration()]) broker = StubBroker() broker.emit_after("process_boot") dramatiq.set_broker(broker) yield broker broker.flush_all() broker.close()
def test_shutdown_notifications_platform_not_supported(recwarn, monkeypatch): # monkeypatch fake platform to test logging. monkeypatch.setattr(shutdown, "current_platform", "not supported") # Given a broker configured with the shutdown notifier broker = StubBroker(middleware=[shutdown.ShutdownNotifications()]) # When the process boots broker.emit_after("process_boot") # A platform support warning is issued assert len(recwarn) == 1 assert str(recwarn[0].message) == ("ShutdownNotifications cannot kill threads " "on your current platform ('not supported').")
def test_time_limit_platform_not_supported(recwarn, monkeypatch): # monkeypatch fake platform to test logging. monkeypatch.setattr(time_limit, "current_platform", "not supported") # Given a broker configured with time limits broker = StubBroker(middleware=[time_limit.TimeLimit()]) # When the process boots broker.emit_after("process_boot") # A platform support warning is issued assert len(recwarn) == 1 assert str( recwarn[0].message) == ("TimeLimit cannot kill threads " "on your current platform ('not supported').")
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()
import contextlib from unittest.mock import MagicMock import dramatiq import pytest from dramatiq import Worker from dramatiq.brokers.stub import StubBroker from sqlalchemy import MetaData, Table from events_api import tasks from events_api.app import create_app from events_api.core.project import database broker = StubBroker() broker.emit_after("process_boot") def clear_tables(engine, table_list=None): meta = MetaData() with contextlib.closing(engine.connect()) as con: trans = con.begin() if table_list is None: meta.reflect(bind=engine) for table in reversed(meta.sorted_tables): con.execute(table.delete()) else: for table_name in table_list: table = Table(table_name, meta, autoload=True, autoload_with=engine)
def broker(backend: WriterBackend) -> StubBroker: stub_broker = StubBroker(middleware=[TaskLogsMiddleware(backend=backend)]) stub_broker.emit_after("process_boot") dramatiq.set_broker(stub_broker) return stub_broker