Skip to content

Commit 4e4c413

Browse files
sentrivanaclaude
andcommitted
fix(rq): Support rq 2.7.0+ where SimpleWorker inherits from BaseWorker
In rq 2.7.0, SimpleWorker was changed to inherit directly from BaseWorker instead of Worker. This meant our monkey-patches on Worker.perform_job and Worker.handle_exception were bypassed for SimpleWorker, causing no Sentry events to be captured. Patch BaseWorker when available (rq >= 1.7.0) to cover both Worker and SimpleWorker. Fall back to patching Worker for older versions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 963b4dd commit 4e4c413

File tree

1 file changed

+14
-4
lines changed
  • sentry_sdk/integrations

1 file changed

+14
-4
lines changed

sentry_sdk/integrations/rq.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
except ImportError:
2424
raise DidNotEnable("RQ not installed")
2525

26+
try:
27+
from rq.worker import BaseWorker
28+
except ImportError:
29+
BaseWorker = None # type: ignore[assignment,misc]
30+
2631
from typing import TYPE_CHECKING
2732

2833
if TYPE_CHECKING:
@@ -43,7 +48,12 @@ def setup_once() -> None:
4348
version = parse_version(RQ_VERSION)
4449
_check_minimum_version(RqIntegration, version)
4550

46-
old_perform_job = Worker.perform_job
51+
# In rq 2.7.0+, SimpleWorker inherits from BaseWorker directly
52+
# instead of Worker, so we need to patch BaseWorker to cover both.
53+
# For older versions where BaseWorker doesn't exist, we patch Worker.
54+
worker_cls = BaseWorker if BaseWorker is not None else Worker
55+
56+
old_perform_job = worker_cls.perform_job
4757

4858
@ensure_integration_enabled(RqIntegration, old_perform_job)
4959
def sentry_patched_perform_job(
@@ -78,9 +88,9 @@ def sentry_patched_perform_job(
7888

7989
return rv
8090

81-
Worker.perform_job = sentry_patched_perform_job
91+
worker_cls.perform_job = sentry_patched_perform_job
8292

83-
old_handle_exception = Worker.handle_exception
93+
old_handle_exception = worker_cls.handle_exception
8494

8595
def sentry_patched_handle_exception(
8696
self: "Worker", job: "Any", *exc_info: "Any", **kwargs: "Any"
@@ -96,7 +106,7 @@ def sentry_patched_handle_exception(
96106

97107
return old_handle_exception(self, job, *exc_info, **kwargs)
98108

99-
Worker.handle_exception = sentry_patched_handle_exception
109+
worker_cls.handle_exception = sentry_patched_handle_exception
100110

101111
old_enqueue_job = Queue.enqueue_job
102112

0 commit comments

Comments
 (0)