def BuildTable(self, start_row, end_row, request):
    client_id = rdf_client.ClientURN(request.REQ.get("client_id"))

    task_id = "task:%s" % request.REQ.get("task_id", "")

    # Make a local QueueManager.
    manager = queue_manager.QueueManager(token=request.token)

    # This is the request.
    request_messages = manager.Query(client_id, task_id=task_id)

    if not request_messages:
      return

    request_message = request_messages[0]

    state_queue = request_message.session_id.Add(
        "state/request:%08X" % request_message.request_id)

    predicate_pre = (manager.FLOW_RESPONSE_PREFIX + "%08X" %
                     request_message.request_id)
    # Get all the responses for this request.
    for i, (predicate, serialized_message, _) in enumerate(
        data_store.DB.ResolvePrefix(state_queue, predicate_pre,
                                    limit=end_row, token=request.token)):

      message = rdf_flows.GrrMessage(serialized_message)

      if i < start_row:
        continue
      if i > end_row:
        break

      # Tie up the request to each response to make it easier to render.
      rdf_response_message = rdf_flows.GrrMessage(message)
      rdf_response_message.request = request_message

      self.AddCell(i, "Task ID", predicate)
      self.AddCell(i, "Response", rdf_response_message)
Make an XCom available for tasks to pull.
dataset/ETHPy150Open google/grr/grr/gui/plugins/inspect_view.py/ResponsesTable.BuildTable--crossover with--dataset/ETHPy150Open airbnb/airflow/airflow/models.py/TaskInstance.xcom_push