class_docstr: StorageManager is helper interface for downloading & uploading files to supported remote storage
  Support remote servers: http(s)/S3/GS/Azure/File-System-Folder
  Cache is enabled by default for all downloaded remote urls/files
docstr: Get a local copy of the remote file. If the remote URL is a direct file access,
  the returned link is the same, otherwise a link to a local copy of the url file is returned.
  Caching is enabled by default, cache limited by number of stored files per cache context.
  Oldest accessed files are deleted when cache is full.
  
  :param str remote_url: remote url link (string)
  :param str cache_context: Optional caching context identifier (string), default context 'global'
  :param bool extract_archive: if True, returned path will be a cached folder containing the archive's content,
      currently only zip files are supported.
  :param str name: name of the target file
  :param bool force_download: download file from remote even if exists in local cache
  :return: Full path to local copy of the requested url. Return None on Error.
docstr_tok: ["Get","a","local","copy","of","the","remote","file",".","If","the","remote","URL","is","a","direct","file","access",",","the","returned","link","is","the","same",",","otherwise","a","link","to","a","local","copy","of","the","url","file","is","returned",".","Caching","is","enabled","by","default",",","cache","limited","by","number","of","stored","files","per","cache","context",".","Oldest","accessed","files","are","deleted","when","cache","is","full",".",":","param","str","remote_url",":","remote","url","link","(","string",")",":","param","str","cache_context",":","Optional","caching","context","identifier","(","string",")",",","default","context","'global'",":","param","bool","extract_archive",":","if","True",",","returned","path","will","be","a","cached","folder","containing","the","archive","'s","content",",","currently","only","zip","files","are","supported",".",":","param","str","name",":","name","of","the","target","file",":","param","bool","force_download",":","download","file","from","remote","even","if","exists","in","local","cache",":","return",":","Full","path","to","local","copy","of","the","requested","url",".","Return","None","on","Error","."]
code: def get_local_copy(
      cls,
      remote_url,
      cache_context=None,
      extract_archive=True,
      name=None,
      force_download=False,
  ):
      # type: (str, Optional[str], bool, Optional[str], bool) -> [str, None]
      """
      Get a local copy of the remote file. If the remote URL is a direct file access,
      the returned link is the same, otherwise a link to a local copy of the url file is returned.
      Caching is enabled by default, cache limited by number of stored files per cache context.
      Oldest accessed files are deleted when cache is full.
  
      :param str remote_url: remote url link (string)
      :param str cache_context: Optional caching context identifier (string), default context 'global'
      :param bool extract_archive: if True, returned path will be a cached folder containing the archive's content,
          currently only zip files are supported.
      :param str name: name of the target file
      :param bool force_download: download file from remote even if exists in local cache
      :return: Full path to local copy of the requested url. Return None on Error.
      """
      cache = CacheManager.get_cache_manager(
          cache_context=cache_context
      )
      cached_file = cache.get_local_copy(
          remote_url=remote_url, force_download=force_download
      )
      if extract_archive and cached_file:
          # this will get us the actual cache (even with direct access)
          cache_path_encoding = Path(
              cache.get_cache_folder()
          ) / cache.get_hashed_url_file(remote_url)
          return cls._extract_to_cache(
              cached_file,
              name,
              cache_context,
              cache_path_encoding=cache_path_encoding.as_posix(),
          )
      return cached_file
  
imports: import fnmatch
  import shutil
  import tarfile
  from multiprocessing.pool import ThreadPool
  from random import random
  from time import time
  from typing import List, Optional, Union
  from zipfile import ZipFile
  from pathlib2 import Path
  from .cache import CacheManager
  from .callbacks import ProgressReport
  from .helper import StorageHelper
  from .util import encode_string_to_filename, safe_extract, create_zip_directories
  from ..debugging.log import LoggerRoot
  from ..config import deferred_config
label_desc: Use image node_id 1 for calling the StorageManager obj's underlying member method code with example usage: obj.get_local_copy(cls, remote_url, cache_context, extract_archive, name, force_download) and returns: cached_file, cls