code: def download_if_needed(folder_name):
      r"""
      Folder name will be saved as `.cache/textflint/[folder_name]`. If it
      doesn't exist on disk, the zip file will be downloaded and extracted.
  
      :param str folder_name: path to folder or file in cache
      :return: path to the downloaded folder or file on disk
      """
  
      cache_dest_path = path_in_cache(folder_name)
  
      os.makedirs(os.path.dirname(cache_dest_path), exist_ok=True)
      # Use a lock to prevent concurrent downloads.
      cache_dest_lock_path = cache_dest_path + ".lock"
      cache_file_lock = filelock.FileLock(cache_dest_lock_path)
      cache_file_lock.acquire()
  
      # Check if already downloaded.
      if os.path.exists(cache_dest_path):
          cache_file_lock.release()
          return cache_dest_path
      # If the file isn't found yet, download the zip file to the cache.
      downloaded_file = tempfile.NamedTemporaryFile(
          dir=CACHE_DIR, delete=False
      )
      http_get(folder_name, downloaded_file)
  
      # Move or unzip the file.
      downloaded_file.close()
      if zipfile.is_zipfile(downloaded_file.name):
          unzip_file(downloaded_file.name, cache_dest_path)
      else:
          logger.info(
              f"Copying {downloaded_file.name} to {cache_dest_path}."
          )
          shutil.copyfile(downloaded_file.name, cache_dest_path)
      cache_file_lock.release()
  
      # Remove the temporary file.
      os.remove(downloaded_file.name)
      logger.info(f"Successfully saved {folder_name} to cache.")
  
      return cache_dest_path
  
file_path: textflint/textflint/common/utils/install.py
imports: import os
  import shutil
  import tempfile
  import zipfile
  import filelock
  import requests
  import tqdm
  from .logger import logger
  from ..settings import CACHE_DIR
label_desc: Use image node_id 5 for calling a global function with example usage: download_if_needed(folder_name) and returns: cache_dest_path, cache_dest_path