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