docs: def UserAcceptance(
    matchList,
    recursiveLookup = True,
    promptComment = None,
    promptOnly = False,
    xStrOverride = "to skip this selection"
  ):
    """
    Prompt user to select a entry from a given match list or to enter a new
    string to look up. If the match list is empty user must enter a new string
    or exit.
  
    Parameters
    ----------
      matchList : list
        A list of entries which the user can select a valid match from.
  
      recursiveLookup : boolean [optional: default = True]
        Allow user to enter a new string to look up.
  
      promptComment : string [optional: default = None]
        Add an additional comment on the end of the prompt message.
  
      promptOnly : boolean [optional: default = False]
        Set to true if match list is expected to be empty. In which case
        the presence of an empty match list will not be mentioned and user
        will be expected to enter a new response to look up.
  
      xStrOverride : string [optional: default = "to skip this selection"]
        Override the string for 'x' response. This can be used if
        the behaviour of the 'x' response is changed.
  
    Returns
    ----------
      string or None
        Either a entry from matchList, another valid response or a new
        string to look up. If match list is empty and recursive lookup is
        disabled or if the user response is 'x' this will return None.
    """
    matchString = ', '.join(matchList)
  
    if len(matchList) == 1:
      goodlogging.Log.Info("UTIL", "Match found: {0}".format(matchString))
      prompt = "Enter 'y' to accept this match or e"
    elif len(matchList) > 1:
      goodlogging.Log.Info("UTIL", "Multiple possible matches found: {0}".format(matchString))
      prompt = "Enter correct match from list or e"
    else:
      if promptOnly is False:
        goodlogging.Log.Info("UTIL", "No match found")
      prompt = "E"
      if not recursiveLookup:
        return None
  
    if recursiveLookup:
      prompt = prompt + "nter a different string to look up or e"
  
    prompt = prompt + "nter 'x' {0} or enter 'exit' to quit this program".format(xStrOverride)
  
    if promptComment is None:
      prompt = prompt + ": "
    else:
      prompt = prompt + " ({0}): ".format(promptComment)
  
    while(1):
      response = goodlogging.Log.Input('UTIL', prompt)
  
      if response.lower() == 'exit':
        goodlogging.Log.Fatal("UTIL", "Program terminated by user 'exit'")
      if response.lower() == 'x':
        return None
      elif response.lower() == 'y' and len(matchList) == 1:
        return matchList[0]
      elif len(matchList) > 1:
        for match in matchList:
          if response.lower() == match.lower():
            return match
      if recursiveLookup:
        return response