docs: def _get_available_placements(D, tt):
      """
      Called from: _prompt_placement()
  
      Get a list of possible places that we can put the new model data into.
      If no model exists yet, we'll use something like chron0model0. If other models exist,
      we'll go for the n+1 entry.
      ex: chron0model0 already exists, so we'll look to chron0model1 next.
  
      :param dict D: Metadata
      :param str tt: Table Type
      :return list _options: Possible placements
      """
      _options = []
  
      try:
          for _pc in ["paleoData", "chronData"]:
              if _pc in D:
                  # for each entry in pc
                  for section_name, section_data in D[_pc].items():
                      # looking for open spots for measurement tables
                      if tt == "measurement":
                          if "measurementTable" in section_data:
                              _options.append(_get_available_placements_1(section_data["measurementTable"], section_name, "measurement"))
  
  
                      # looking for open spots for model tables
                      else:
                          # Is there a model? Need model data to keep going
                          if "model" in section_data:
                              #  this is for adding a whole model (all 4 tables, ens/dist/sum/method)
                              if tt == "model":
                                  _options.append(_get_available_placements_1(section_data["model"], section_name, "model"))
                              else:
  
                                  # for adding individual model tables
                                  for _k, _v in section_data["model"]:
                                      # keys here are stored as "<type>Table", so add "Table" to each table type
                                      _tt_table = "{}Table".format(tt)
                                      # does this table exist?
                                      if _tt_table in _v:
                                          # Get the first available position for this section
                                          _options.append(
                                              _get_available_placements_1(_v[_tt_table], _k, tt))
                                      else:
                                          # Doesn't currently exist. Make the first option index 0.
                                          _options.append("{}{}0".format(_k, tt))
  
                          # no models present, so we automatically default placement options to the 0 index.
                          else:
                              if tt == "model":
                                  # adding a whole model, so no need to be specific
                                  _options.append("{}model0".format(section_name))
                              else:
                                  # adding a specific table, so the position is more specific also
                                  _options.append("{}model0{}0".format(section_name, tt))
  
  
      except Exception as e:
          sys.exit("Looking for open table positions: Unable to find placement options, {}".format(e))
  
      # remove empty names
      _options = [i for i in _options if i]
      # Is the whole list empty? that's not good.
      if not _options:
          sys.exit("Error: No available positions found to place new data. Something went wrong.")
      return _options