docs: def prepare_csv_read(data, field_names, *args, **kwargs):
      """Prepare various input types for CSV parsing.
  
      Args:
          data (iter): Data to read
          field_names (tuple of str): Ordered names to assign to fields
  
      Returns:
          csv.DictReader: CSV reader suitable for parsing
  
      Raises:
          TypeError: Invalid value for data
      """
      if hasattr(data, 'readlines') or isinstance(data, list):
          pass
      elif isinstance(data, basestring):
          data = open(data)
      else:
          raise TypeError('Unable to handle data of type %r' % type(data))
      return csv.DictReader(data, field_names, *args, **kwargs)