docs: def get_authors_as_str(x):
      """
      Take author or investigator data, and convert it to a concatenated string of names.
      Author data structure has a few variations, so account for all.
  
      :param any x: Author data
      :return str: Author string
      """
      _authors = ""
      # if it's a string already, we're done
      if isinstance(x, str):
          return x
  
      # elif it's a list, keep going
      elif isinstance(x, list):
          # item in list is a str
          if isinstance(x[0], str):
              # loop and concat until the last item
              for name in x[:-1]:
                  # all inner items get a semi-colon at the end
                  _authors += str(name) + "; "
              # last item does not get a semi-colon at the end
              _authors += str(x[-1])
  
          # item in list is a dictionary
          elif isinstance(x[0], dict):
              # dictionary structure SHOULD have authors listed until the "name" key.
              try:
                  # loop and concat until the last item
                  for entry in x[:-1]:
                      # all inner items get a semi-colon at the end
                      _authors += str(entry["name"]) + "; "
                  # last item does not get a semi-colon at the end
                  _authors += str(x[-1]["name"])
              except KeyError:
                  logger_misc.warn("get_authors_as_str: KeyError: Authors incorrect data structure")
  
      else:
          logger_misc.debug("get_authors_as_str: TypeError: author/investigators isn't str or list: {}".format(type(x)))
  
      return _authors