def _capture_exception(exc_info, hub): # type: (ExcInfo, Hub) -> None client = hub.client client_options = client.options # type: ignore mechanism = {"type": "spark", "handled": False} exc_info = exc_info_from_error(exc_info) exc_type, exc_value, tb = exc_info rv = [] # On Exception worker will call sys.exit(-1), so we can ignore SystemExit and similar errors for exc_type, exc_value, tb in walk_exception_chain(exc_info): if exc_type not in (SystemExit, EOFError, ConnectionResetError): rv.append( single_exception_from_error_tuple(exc_type, exc_value, tb, client_options, mechanism)) if rv: rv.reverse() hint = event_hint_with_exc_info(exc_info) event = {"level": "error", "exception": {"values": rv}} _tag_task_context() hub.capture_event(event, hint=hint)
def process_django_templates(event, hint): # type: (Dict[str, Any], Dict[str, Any]) -> Dict[str, Any] if hint.get("exc_info", None) is None: return event if "exception" not in event: return event exception = event["exception"] if "values" not in exception: return event for exception, (_, exc_value, _) in zip(exception["values"], walk_exception_chain(hint["exc_info"])): frame = get_template_frame_from_exception(exc_value) if frame is not None: frames = exception.get("stacktrace", {}).get("frames", []) for i in reversed(range(len(frames))): f = frames[i] if (f.get("function") in ("parse", "render") and f.get("module") == "django.template.base"): i += 1 break else: i = len(frames) frames.insert(i, frame) return event
def process_django_templates(event, hint): # type: (Event, Optional[Hint]) -> Optional[Event] if hint is None: return event exc_info = hint.get("exc_info", None) if exc_info is None: return event exception = event.get("exception", None) if exception is None: return event values = exception.get("values", None) if values is None: return event for exception, (_, exc_value, _) in zip( reversed(values), walk_exception_chain(exc_info) ): frame = get_template_frame_from_exception(exc_value) if frame is not None: frames = exception.get("stacktrace", {}).get("frames", []) for i in reversed(range(len(frames))): f = frames[i] if ( f.get("function") in ("Parser.parse", "parse", "render") and f.get("module") == "django.template.base" ): i += 1 break else: i = len(frames) frames.insert(i, frame) return event
def add_executing_info(event, hint): # type: (Event, Optional[Hint]) -> Optional[Event] if Hub.current.get_integration(ExecutingIntegration) is None: return event if hint is None: return event exc_info = hint.get("exc_info", None) if exc_info is None: return event exception = event.get("exception", None) if exception is None: return event values = exception.get("values", None) if values is None: return event for exception, (_exc_type, _exc_value, exc_tb) in zip(reversed(values), walk_exception_chain(exc_info)): sentry_frames = [ frame for frame in exception.get("stacktrace", {}).get( "frames", []) if frame.get("function") ] tbs = list(iter_stacks(exc_tb)) if len(sentry_frames) != len(tbs): continue for sentry_frame, tb in zip(sentry_frames, tbs): frame = tb.tb_frame source = executing.Source.for_frame(frame) sentry_frame["function"] = source.code_qualname( frame.f_code) return event
def process_django_templates(event, hint): if hint.get("exc_info", None) is None: return event if "exception" not in event: return event exception = event["exception"] if "values" not in exception: return event for exception, (_, exc_value, _) in zip(exception["values"], walk_exception_chain(hint["exc_info"])): frame = get_template_frame_from_exception(exc_value) if frame is not None: frames = exception.setdefault("stacktrace", {}).setdefault("frames", []) frames.append(frame) return event
def add_executing_info(event, hint): # type: (Event, Optional[Hint]) -> Optional[Event] if Hub.current.get_integration(PureEvalIntegration) is None: return event if hint is None: return event exc_info = hint.get("exc_info", None) if exc_info is None: return event exception = event.get("exception", None) if exception is None: return event values = exception.get("values", None) if values is None: return event for exception, (_exc_type, _exc_value, exc_tb) in zip(reversed(values), walk_exception_chain(exc_info)): sentry_frames = [ frame for frame in exception.get("stacktrace", {}).get( "frames", []) if frame.get("function") ] tbs = list(iter_stacks(exc_tb)) if len(sentry_frames) != len(tbs): continue for sentry_frame, tb in zip(sentry_frames, tbs): sentry_frame["vars"].update(pure_eval_frame(tb.tb_frame)) return event