code: def _prepare_batch_request(self):
          
          if len(self._requests) == 0:
              raise ValueError("No deferred requests")
  
          multi = MIMEMultipart()
  
          for method, uri, headers, body in self._requests:
              subrequest = MIMEApplicationHTTP(method, uri, headers, body)
              multi.attach(subrequest)
  
          # The `email` package expects to deal with "native" strings
          if six.PY3:  # pragma: NO COVER  Python3
              buf = io.StringIO()
          else:
              buf = io.BytesIO()
          generator = Generator(buf, False, 0)
          generator.flatten(multi)
          payload = buf.getvalue()
  
          # Strip off redundant header text
          _, body = payload.split("\n\n", 1)
          return dict(multi._headers), body
docs: Prepares headers and body for a batch request.
  
          :rtype: tuple (dict, str)
          :returns: The pair of headers and body of the batch request to be sent.
          :raises: :class:`ValueError` if no requests have been deferred.