docs: def Request(self):
      """Create the Approval object and notify the Approval Granter."""
  
      approval_id = "approval:%X" % random.UInt32()
      approval_urn = self.BuildApprovalUrn(approval_id)
  
      email_msg_id = email.utils.make_msgid()
  
      with aff4.FACTORY.Create(
          approval_urn, self.approval_type, mode="w",
          token=self.token) as approval_request:
        approval_request.Set(approval_request.Schema.SUBJECT(self.subject_urn))
        approval_request.Set(
            approval_request.Schema.REQUESTOR(self.token.username))
        approval_request.Set(approval_request.Schema.REASON(self.reason))
        approval_request.Set(approval_request.Schema.EMAIL_MSG_ID(email_msg_id))
  
        cc_addresses = (self.email_cc_address,
                        config.CONFIG.Get("Email.approval_cc_address"))
        email_cc = ",".join(filter(None, cc_addresses))
  
        # When we reply with the approval we want to cc all the people to whom the
        # original approval was sent, to avoid people approving stuff that was
        # already approved.
        if email_cc:
          reply_cc = ",".join((self.approver, email_cc))
        else:
          reply_cc = self.approver
  
        approval_request.Set(approval_request.Schema.EMAIL_CC(reply_cc))
  
        approval_request.Set(
            approval_request.Schema.NOTIFIED_USERS(self.approver))
  
        # We add ourselves as an approver as well (The requirement is that we have
        # 2 approvers, so the requester is automatically an approver).
        approval_request.AddAttribute(
            approval_request.Schema.APPROVER(self.token.username))
  
      approval_link_urns = self.BuildApprovalSymlinksUrns(approval_id)
      for link_urn in approval_link_urns:
        with aff4.FACTORY.Create(
            link_urn, aff4.AFF4Symlink, mode="w", token=self.token) as link:
          link.Set(link.Schema.SYMLINK_TARGET(approval_urn))
  
      return approval_urn