Skip to content
Merged
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
22 changes: 18 additions & 4 deletions sentry_sdk/integrations/rq.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@
except ImportError:
raise DidNotEnable("RQ not installed")

try:
from rq.worker import BaseWorker

if not hasattr(BaseWorker, "perform_job"):
BaseWorker = None
except ImportError:
BaseWorker = None

from typing import TYPE_CHECKING

if TYPE_CHECKING:
Expand All @@ -43,7 +51,13 @@ def setup_once() -> None:
version = parse_version(RQ_VERSION)
_check_minimum_version(RqIntegration, version)

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

old_perform_job = worker_cls.perform_job

@ensure_integration_enabled(RqIntegration, old_perform_job)
def sentry_patched_perform_job(
Expand Down Expand Up @@ -78,9 +92,9 @@ def sentry_patched_perform_job(

return rv

Worker.perform_job = sentry_patched_perform_job
worker_cls.perform_job = sentry_patched_perform_job

old_handle_exception = Worker.handle_exception
old_handle_exception = worker_cls.handle_exception

def sentry_patched_handle_exception(
self: "Worker", job: "Any", *exc_info: "Any", **kwargs: "Any"
Expand All @@ -96,7 +110,7 @@ def sentry_patched_handle_exception(

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

Worker.handle_exception = sentry_patched_handle_exception
worker_cls.handle_exception = sentry_patched_handle_exception

old_enqueue_job = Queue.enqueue_job

Expand Down
Loading