'Reads from the record_generator and generates UploadWorkItems.
Yields:
Instances of class UploadWorkItem
Raises:
ResumeError: If the progress database and data file indicate a different
number of rows.'

def Batches(self):

    if self.skip_first:
        logger.info('Skipping    header    line.')
        try:
            self.reader.next()
        except StopIteration:
            return
    exhausted = False
    self.line_number = 1
    self.column_count = None
    logger.info('Starting    import;    maximum    %d    entities    per    post', self.batch_size)
    state = None
    if self.progress_generator:
        for (progress_key, state, kind, key_start, key_end) in self.progress_generator:
            if key_start:
                try:
                    self._AdvanceTo(key_start)
                    self._ReadRows(key_start, key_end)
                    (yield self._MakeItem(key_start, key_end, self.read_rows, progress_key=progress_key))
                except StopIteration:
                    logger.error('Mismatch    between    data    file    and    progress    database')
                    raise ResumeError('Mismatch    between    data    file    and    progress    database')
            elif (state == DATA_CONSUMED_TO_HERE):
                try:
                    self._AdvanceTo((key_end + 1))
                except StopIteration:
                    state = None
    if ((self.progress_generator is None) or (state == DATA_CONSUMED_TO_HERE)):
        while (not exhausted):
            key_start = self.line_number
            key_end = ((self.line_number + self.batch_size) - 1)
            try:
                self._ReadRows(key_start, key_end)
            except StopIteration:
                exhausted = True
                key_end = (self.line_number - 1)
            if (key_start <= key_end):
                (yield self._MakeItem(key_start, key_end, self.read_rows))
