示例#1
0
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)
示例#2
0
        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
示例#3
0
        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
示例#4
0
        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
示例#5
0
        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