docs: def get_workunit(self, ignore_list=None):
          """
          Gets a new unit of work.
  
          Args:
            ignore_list: list(str)
              A list of filenames which should be ignored.  Defaults to None.
  
          Returns:
            new_workunit: WorkUnit
              A new unit of work that has not yet been processed.  A lock on
              it has been acquired.
  
          Raises:
            NoAvailableWorkException
              There is no more work available.
          """
          if ignore_list is None:
              ignore_list = []
  
          potential_files = self.get_potential_files(ignore_list)
  
          while len(potential_files) > 0:
              potential_file = self.select_potential_file(potential_files)
              potential_files.remove(potential_file)
              if self._filter(potential_file):
                  continue
  
              if self.directory_context.get_file_size(potential_file) == 0:
                  continue
  
              if self.progress_manager.is_done(potential_file):
                  self._done.append(potential_file)
                  continue
              else:
                  try:
                      self.progress_manager.lock(potential_file)
                  except FileLockedException:
                      continue
  
                  self._already_fetched.append(potential_file)
                  return self.builder.build_workunit(
                      self.directory_context.get_full_path(potential_file))
  
          logger.info("No eligible workunits remain to be fetched.")
  
          raise NoAvailableWorkException()