def Layout(self, request, response):
    subject = request.REQ.get("subject")
    reason = request.REQ.get("reason")
    approver = request.REQ.get("approver")
    keepalive = bool(request.REQ.get("keepalive"))

    client_id, _ = rdfvalue.RDFURN(subject).Split(2)

    # TODO(user): If something goes wrong here (or in similar renderers below)
    # we should really provide some feedback for the user.
    if approver and reason:
      # Request approval for this client
      flow.GRRFlow.StartFlow(client_id=client_id,
                             flow_name="RequestClientApprovalFlow",
                             reason=reason, approver=approver,
                             token=request.token,
                             email_cc_address=_GetEmailCCAddress(request),
                             subject_urn=rdf_client.ClientURN(client_id))

    if keepalive:
      flow.GRRFlow.StartFlow(client_id=client_id, flow_name="KeepAlive",
                             duration=3600, token=request.token)

    super(ClientApprovalRequestRenderer, self).Layout(request, response)
Launch the RequestClientApproval flow on the backend.
dataset/ETHPy150Open google/grr/grr/gui/plugins/acl_manager.py/ClientApprovalRequestRenderer.Layout