docs: def resource_row_set(package, resource):
      """ Generate an iterator over all the rows in this resource's
      source data. """
      # This is a work-around because messytables hangs on boto file
      # handles, so we're doing it via plain old HTTP.
      table_set = any_tableset(resource.fh(),
                               extension=resource.meta.get('extension'),
                               mimetype=resource.meta.get('mime_type'))
      tables = list(table_set.tables)
      if not len(tables):
          log.error("No tables were found in the source file.")
          return
  
      row_set = tables[0]
      offset, headers = headers_guess(row_set.sample)
      row_set.register_processor(headers_processor(headers))
      row_set.register_processor(offset_processor(offset + 1))
      types = type_guess(row_set.sample, strict=True)
      row_set.register_processor(types_processor(types))
      return row_set