<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def UploadOperations(self, operations, is_last=False):
 """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. """

    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