def _generate_trace_from_frame()

in sapp/ui/interactive.py [0:0]


    def _generate_trace_from_frame(self) -> None:
        with self.db.make_session() as session:
            trace_frame = (
                session.query(
                    TraceFrame.id,
                    TraceFrame.caller_id,
                    CallerText.contents.label("caller"),
                    TraceFrame.caller_port,
                    TraceFrame.callee_id,
                    CalleeText.contents.label("callee"),
                    TraceFrame.callee_port,
                    TraceFrame.callee_location,
                    TraceFrame.kind,
                    TraceFrame.type_interval_lower,
                    TraceFrame.type_interval_upper,
                    TraceFrame.preserves_type_context,
                    FilenameText.contents.label("filename"),
                )
                .filter(TraceFrame.id == self.current_frame_id)
                .join(CallerText, CallerText.id == TraceFrame.caller_id)
                .join(CalleeText, CalleeText.id == TraceFrame.callee_id)
                .join(FilenameText, FilenameText.id == TraceFrame.filename_id)
                .one()
            )
            navigation = trace.navigate_trace_frames(
                session,
                [TraceFrameQueryResult.from_record(trace_frame)],
                self.sources,
                self.sinks,
            )

        first_trace_frame = navigation[0][0]
        placeholder_tuple = [
            TraceTuple(trace_frame=first_trace_frame, placeholder=True)
        ]

        self.trace_tuples = self._create_trace_tuples(navigation)

        if trace_frame.kind == TraceKind.POSTCONDITION:
            self.trace_tuples = self.trace_tuples[::-1] + placeholder_tuple
            self.current_trace_frame_index = len(self.trace_tuples) - 1
            return

        self.trace_tuples = placeholder_tuple + self.trace_tuples
        self.current_trace_frame_index = 0