Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions sentry_sdk/integrations/arq.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def patch_create_worker() -> None:

@ensure_integration_enabled(ArqIntegration, old_create_worker)
def _sentry_create_worker(*args: "Any", **kwargs: "Any") -> "Worker":
settings_cls = args[0]
settings_cls = args[0] if args else kwargs.get("settings_cls")

if isinstance(settings_cls, dict):
if "functions" in settings_cls:
Expand All @@ -200,13 +200,14 @@ def _sentry_create_worker(*args: "Any", **kwargs: "Any") -> "Worker":
]

if hasattr(settings_cls, "functions"):
settings_cls.functions = [
_get_arq_function(func) for func in settings_cls.functions
settings_cls.functions = [ # type: ignore[union-attr]
_get_arq_function(func)
for func in settings_cls.functions # type: ignore[union-attr]
]
if hasattr(settings_cls, "cron_jobs"):
settings_cls.cron_jobs = [
settings_cls.cron_jobs = [ # type: ignore[union-attr]
_get_arq_cron_job(cron_job)
for cron_job in (settings_cls.cron_jobs or [])
for cron_job in (settings_cls.cron_jobs or []) # type: ignore[union-attr]
]

if "functions" in kwargs:
Expand Down
51 changes: 50 additions & 1 deletion tests/integrations/arq/test_arq.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,58 @@ def inner(
return inner


@pytest.fixture
def init_arq_with_kwarg_settings(sentry_init):
"""Test fixture that passes settings_cls as keyword argument only."""

def inner(
cls_functions=None,
cls_cron_jobs=None,
kw_functions=None,
kw_cron_jobs=None,
allow_abort_jobs_=False,
):
cls_functions = cls_functions or []
cls_cron_jobs = cls_cron_jobs or []

kwargs = {}
if kw_functions is not None:
kwargs["functions"] = kw_functions
if kw_cron_jobs is not None:
kwargs["cron_jobs"] = kw_cron_jobs

sentry_init(
integrations=[ArqIntegration()],
traces_sample_rate=1.0,
send_default_pii=True,
)

server = FakeRedis()
pool = ArqRedis(pool_or_conn=server.connection_pool)

class WorkerSettings:
functions = cls_functions
cron_jobs = cls_cron_jobs
redis_pool = pool
allow_abort_jobs = allow_abort_jobs_

if not WorkerSettings.functions:
del WorkerSettings.functions
if not WorkerSettings.cron_jobs:
del WorkerSettings.cron_jobs

# Pass settings_cls as keyword argument (not positional)
worker = arq.worker.create_worker(settings_cls=WorkerSettings, **kwargs)

return pool, worker

return inner


@pytest.mark.asyncio
@pytest.mark.parametrize(
"init_arq_settings", ["init_arq", "init_arq_with_dict_settings"]
"init_arq_settings",
["init_arq", "init_arq_with_dict_settings", "init_arq_with_kwarg_settings"],
)
async def test_job_result(init_arq_settings, request):
async def increase(ctx, num):
Expand Down
Loading