def parse_cache(self, full_df):
        """
        Format the cached data model into a dictionary of DataFrames
        and a criteria map DataFrame.

        Parameters
        ----------
        full_df : DataFrame
            result of self.get_dm_offline()

        Returns
        ----------
        data_model : dictionary of DataFrames
        crit_map : DataFrame
        """
        data_model = {}
        levels = ['specimens', 'samples', 'sites', 'locations',
                  'ages', 'measurements', 'criteria', 'contribution',
                  'images']
        criteria_map = pd.DataFrame(full_df['criteria_map'])
        for level in levels:
            df = pd.DataFrame(full_df['tables'][level]['columns'])
            data_model[level] = df.transpose()
        # replace np.nan with None
        data_model[level] = data_model[level].where((pd.notnull(data_model[level])), None)
        return data_model, criteria_map
Format the cached data model into a dictionary of DataFrames
        and a criteria map DataFrame.

        Parameters
        ----------
        full_df : DataFrame
            result of self.get_dm_offline()

        Returns
        ----------
        data_model : dictionary of DataFrames
        crit_map : DataFrame