Skip to content

Commit 646849b

Browse files
sentrivanaclaude
andauthored
fix(rq): Support rq 2.7.0+ where SimpleWorker inherits from BaseWorker (#5505)
## Summary - In rq 2.7.0, `SimpleWorker` was refactored to inherit directly from `BaseWorker` instead of `Worker` ([rq#2336](rq/rq#2336)). This broke our integration because we only monkey-patched `Worker.perform_job` and `Worker.handle_exception`, which `SimpleWorker` no longer inherits. - Now patches `BaseWorker` when available (rq >= 1.7.0), falling back to `Worker` for older versions. Since both `Worker` and `SimpleWorker` inherit from `BaseWorker`, this covers both worker types. ## Test plan - [x] `py3.14-rq-v2.6.1`: 10 passed (backward compat) - [x] `py3.14-rq-v2.7.0`: 10 passed (new version) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 8a8d14a commit 646849b

1 file changed

Lines changed: 18 additions & 4 deletions

File tree

  • sentry_sdk/integrations

sentry_sdk/integrations/rq.py

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

26+
try:
27+
from rq.worker import BaseWorker
28+
29+
if not hasattr(BaseWorker, "perform_job"):
30+
BaseWorker = None
31+
except ImportError:
32+
BaseWorker = None
33+
2634
from typing import TYPE_CHECKING
2735

2836
if TYPE_CHECKING:
@@ -43,7 +51,13 @@ def setup_once() -> None:
4351
version = parse_version(RQ_VERSION)
4452
_check_minimum_version(RqIntegration, version)
4553

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

4862
@ensure_integration_enabled(RqIntegration, old_perform_job)
4963
def sentry_patched_perform_job(
@@ -78,9 +92,9 @@ def sentry_patched_perform_job(
7892

7993
return rv
8094

81-
Worker.perform_job = sentry_patched_perform_job
95+
worker_cls.perform_job = sentry_patched_perform_job
8296

83-
old_handle_exception = Worker.handle_exception
97+
old_handle_exception = worker_cls.handle_exception
8498

8599
def sentry_patched_handle_exception(
86100
self: "Worker", job: "Any", *exc_info: "Any", **kwargs: "Any"
@@ -96,7 +110,7 @@ def sentry_patched_handle_exception(
96110

97111
return old_handle_exception(self, job, *exc_info, **kwargs)
98112

99-
Worker.handle_exception = sentry_patched_handle_exception
113+
worker_cls.handle_exception = sentry_patched_handle_exception
100114

101115
old_enqueue_job = Queue.enqueue_job
102116

0 commit comments

Comments
 (0)