docs: def load(full_filename):
          """Load a .csv file into a CSVModel.
  
          Parameters
          ----------
          full_filename : :obj:`str`
              The file path to a .csv file.
  
          Returns
          -------
          :obj:`CSVModel`
              The CSVModel initialized with the data in the given file.
  
          Raises
          ------
          Excetpion
              If the CSV file does not exist or is malformed.
          """
          with open(full_filename, 'r') as file:
              reader = csv.DictReader(file)
              headers = reader.fieldnames
              if '_uid' not in headers or '_default' not in headers:
                  raise Exception("Malformed CSVModel file!")
  
              all_rows = [row for row in reader]
              types = all_rows[0]
              table = [types]
              default_entry = table[0]['_default']
  
              for i in range(1, len(all_rows)):
                  raw_row = all_rows[i]
                  row = {}
                  for column_name in headers:
                      if raw_row[column_name] != default_entry and column_name != '':
                          if types[column_name] == 'bool':
                              row[column_name] = CSVModel._str_to_bool(raw_row[column_name])
                          else:
                              try:
                                  row[column_name] = CSVModel._KNOWN_TYPES_MAP[types[column_name]](raw_row[column_name])
                              except:
                                  logging.error('{}, {}, {}'.format(column_name, types[column_name], raw_row[column_name]))
                                  row[column_name] = CSVModel._KNOWN_TYPES_MAP[types[column_name]](bool(raw_row[column_name]))
                      else:
                          row[column_name] = default_entry
                  table.append(row)
  
          if len(table) == 1:
              next_valid_uid = 0
          else:
              next_valid_uid = int(table[-1]['_uid']) + 1
  
          headers_init = headers[1:-1]
          types_init = [types[column_name] for column_name in headers_init]
          headers_types_list = zip(headers_init, types_init)
  
          csv_model = CSVModel(full_filename, headers_types_list, default_entry=default_entry)
          csv_model._uid = next_valid_uid
          csv_model._table = table
          csv_model._save()
          return csv_model