code: def UploadOperations(self, operations, is_last=False):
      
      if self._is_last:
        raise googleads.errors.AdWordsBatchJobServiceInvalidOperationError(
            'Can\'t add new operations to a completed incremental upload.')
      # Build the request
      req = self._request_builder.BuildUploadRequest(
          self._upload_url, operations,
          current_content_length=self._current_content_length, is_last=is_last)
      # Make the request, ignoring the urllib2.HTTPError raised due to HTTP status
      # code 308 (for resumable uploads).
      try:
        _batch_job_logger.debug('Outgoing request: %s %s %s',
                                req.get_full_url(), req.headers, req.data)
  
        self._url_opener.open(req)
  
        if _batch_job_logger.isEnabledFor(logging.INFO):
          _batch_job_logger.info('Request summary: %s',
                                 self._ExtractRequestSummaryFields(req))
      except urllib2.HTTPError as e:
        if e.code != 308:
          if _batch_job_logger.isEnabledFor(logging.WARNING):
            _batch_job_logger.warning(
                'Request summary: %s',
                self._ExtractRequestSummaryFields(req, error=e))
          raise
      # Update upload status.
      self._current_content_length += len(req.data)
      self._is_last = is_last
docs: Uploads operations to the given uploadUrl in incremental steps.
  
      Note: Each list of operations is expected to contain operations of the
      same type, similar to how one would normally send operations in an
      AdWords API Service request.
  
      Args:
        operations: one or more lists of operations as would be sent to the
          AdWords API for the associated service.
        is_last: a boolean indicating whether this is the final increment to be
          added to the batch job.