code: def get_or_create(full_filename, headers_types=None, default_entry=''):
          
          # convert dictionaries to list
          if isinstance(headers_types, dict):
              headers_types_list = [(k,v) for k,v in headers_types.items()]
              headers_types = headers_types_list
  
          if os.path.isfile(full_filename):
              return CSVModel.load(full_filename)
          else:
              return CSVModel(full_filename, headers_types, default_entry=default_entry)
docs: Load a .csv file into a CSVModel if the file exists, or create
          a new CSVModel with the given filename if the file does not exist.
  
          Parameters
          ----------
          full_filename : :obj:`str`
              The file path to a .csv file.
  
          headers_types : :obj:`list` of :obj:`tuple` of :obj:`str`, :obj:`str`
              A list of tuples, where the first element in each tuple is the
              string header for a column and the second element is that column's
              data type as a string.
  
          default_entry : :obj:`str`
              The default entry for cells in the CSV.
  
          Returns
          -------
          :obj:`CSVModel`
              The CSVModel initialized with the data in the given file, or a new
              CSVModel tied to the filename if the file doesn't currently exist.