code: def _finish_futures(self, responses):
          
          # If a bad status occurs, we track it, but don't raise an exception
          # until all futures have been populated.
          exception_args = None
  
          if len(self._target_objects) != len(responses):
              raise ValueError("Expected a response for every request.")
  
          for target_object, subresponse in zip(self._target_objects, responses):
              if not 200 <= subresponse.status_code < 300:
                  exception_args = exception_args or subresponse
              elif target_object is not None:
                  try:
                      target_object._properties = subresponse.json()
                  except ValueError:
                      target_object._properties = subresponse.content
  
          if exception_args is not None:
              raise exceptions.from_http_response(exception_args)
docs: Apply all the batch responses to the futures created.
  
          :type responses: list of (headers, payload) tuples.
          :param responses: List of headers and payloads from each response in
                            the batch.
  
          :raises: :class:`ValueError` if no requests have been deferred.