code: def _list_incomplete_uploads(self, bucket_name, prefix='',
                                   recursive=False, is_aggregate_size=True):
          
          is_valid_bucket_name(bucket_name)
  
          # If someone explicitly set prefix to None convert it to empty string.
          if prefix is None:
              prefix = ''
  
          # Initialize query parameters.
          query = {
              'uploads': '',
              'max-uploads': '1000',
              'prefix': prefix
          }
  
          if not recursive:
              query['delimiter'] = '/'
  
          key_marker, upload_id_marker = '', ''
          is_truncated = True
          while is_truncated:
              if key_marker:
                  query['key-marker'] = key_marker
              if upload_id_marker:
                  query['upload-id-marker'] = upload_id_marker
  
              response = self._url_open('GET',
                                        bucket_name=bucket_name,
                                        query=query)
              (uploads, is_truncated, key_marker,
               upload_id_marker) = parse_list_multipart_uploads(response.data,
                                                                bucket_name)
              for upload in uploads:
                  if is_aggregate_size:
                      upload.size = self._get_total_multipart_upload_size(
                          upload.bucket_name,
                          upload.object_name,
                          upload.upload_id)
                  yield upload
docs: List incomplete uploads list all previously uploaded incomplete multipart objects.
  
          :param bucket_name: Bucket name to list uploaded objects.
          :param prefix: String specifying objects returned must begin with.
          :param recursive: If yes, returns all incomplete objects for a specified prefix.
          :return: An generator of incomplete uploads in alphabetical order.