docs: def _GenerateLibraryPath(self, tvFile, libraryDir):
      """
      Creates a full path for TV file in TV library.
  
      This initially attempts to directly match a show directory in the database,
      if this fails it searches the library directory for the best match. The
      user can then select an existing match or can propose a new directory to
      use as the show root directory.
  
      The season directory is also generated and added to the show and
      library directories. This is then used by the tvFile GenerateNewFilePath
      method to create a new path for the file.
  
      Parameters
      ----------
        tvFile : tvfile.TVFile
          Contains show and file info.
  
        libraryDir : string
          Root path of TV library directory.
  
      Returns
      ----------
        tvfile.TVFile
          This is an updated version of the input object.
      """
      goodlogging.Log.Info("RENAMER", "Looking up library directory in database for show: {0}".format(tvFile.showInfo.showName))
      goodlogging.Log.IncreaseIndent()
      showID, showName, showDir = self._db.SearchTVLibrary(showName = tvFile.showInfo.showName)[0]
  
      if showDir is None:
        goodlogging.Log.Info("RENAMER", "No directory match found in database - looking for best match in library directory: {0}".format(libraryDir))
        dirList = os.listdir(libraryDir)
        listDir = False
        matchName = tvFile.showInfo.showName
        while showDir is None:
          if len(dirList) == 0:
            goodlogging.Log.Info("RENAMER", "TV Library directory is empty")
            response = None
          else:
            if listDir is True:
              goodlogging.Log.Info("RENAMER", "TV library directory contains: {0}".format(', '.join(dirList)))
            else:
              matchDirList = util.GetBestMatch(matchName, dirList)
  
            listDir = False
  
            if self._skipUserInput is True:
              if len(matchDirList) == 1:
                response = matchDirList[0]
                goodlogging.Log.Info("RENAMER", "Automatic selection of show directory: {0}".format(response))
              else:
                response = None
                goodlogging.Log.Info("RENAMER", "Could not make automatic selection of show directory")
            else:
              listDirPrompt = "enter 'ls' to list all items in TV library directory"
              response = util.UserAcceptance(matchDirList, promptComment = listDirPrompt, promptOnly = listDir, xStrOverride = "to create new show directory")
  
          if response is None:
            showDir = self._CreateNewShowDir(tvFile.showInfo.showName)
            if showDir is None:
              goodlogging.Log.DecreaseIndent()
              return tvFile
          elif response.lower() == 'ls':
            listDir = True
          elif response in matchDirList:
            showDir = response
          else:
            matchName = response
  
        self._db.UpdateShowDirInTVLibrary(showID, showDir)
  
      # Add base directory to show path
      showDir = os.path.join(libraryDir, showDir)
  
      goodlogging.Log.DecreaseIndent()
  
      # Lookup and add season directory to show path
      seasonDir = self._LookUpSeasonDirectory(showID, showDir, tvFile.showInfo.seasonNum)
  
      if seasonDir is None:
        return tvFile
      else:
        showDir = os.path.join(showDir, seasonDir)
  
      # Call tvFile function to generate file name
      tvFile.GenerateNewFilePath(showDir)
  
      return tvFile