def insert(self, data):
        """Insert a row into the .csv file.

        Parameters
        ----------
        data : :obj:`dict`
            A dictionary mapping keys (header strings) to values.

        Returns
        -------
        int
            The UID for the new row.

        Raises
        ------
        Exception
            If the value for a given header is not of the appropriate type.
        """
        row = {key:self._default_entry for key in self._headers}
        row['_uid'] = self._get_new_uid()

        for key, val in data.items():
            if key in ('_uid', '_default'):
                logging.warn("Cannot manually set columns _uid or _default of a row! Given data: {0}".format(data))
                continue
            if not isinstance(val, CSVModel._KNOWN_TYPES_MAP[self._headers_types[key]]):
                raise Exception('Data type mismatch for column {0}. Expected: {1}, got: {2}'.format(key,
                                                        CSVModel._KNOWN_TYPES_MAP[self._headers_types[key]], type(val)))
            row[key] = val

        self._table.append(row)
        self._save()
        return row['_uid']
Insert a row into the .csv file.

        Parameters
        ----------
        data : :obj:`dict`
            A dictionary mapping keys (header strings) to values.

        Returns
        -------
        int
            The UID for the new row.

        Raises
        ------
        Exception
            If the value for a given header is not of the appropriate type.