code: def download(self, local_path=None, only_newer=True):
      if self.storage_handler is None:
          msg: str = (
              "No storage handler is set for artifact {0}".format(
                  self.key
              )
          )
          util.report_fatal(msg, self.logger)
  
      if self.key is None:
          return self._download_no_key_artifact()
  
      if local_path is None:
          if self.local_path is not None and os.path.exists(
              self.local_path
          ):
              local_path = self.local_path
          else:
              if self.is_mutable:
                  local_path = artifacts_tracker.get_artifact_cache(
                      self.key
                  )
              else:
                  local_path = artifacts_tracker.get_blob_cache(
                      self.key
                  )
                  if os.path.exists(local_path):
                      msg: str = (
                          "Immutable artifact exists at local_path {0},"
                          + " skipping the download"
                      ).format(local_path)
                      self.logger.debug(msg)
                      self.local_path = local_path
                      return local_path
  
      local_path = re.sub(r"\/\Z", "", local_path)
      self.logger.debug(
          "Downloading dir %s to local path %s from studio.storage...",
          self.key,
          local_path,
      )
  
      if only_newer and os.path.exists(local_path):
          if not self._has_newer_artifact(local_path):
              return local_path
  
      # Now download our artifact from studio.storage and untar it:
      return self._download_and_untar_artifact(local_path)
  
imports: import hashlib
  import os
  import re
  import tarfile
  from typing import Dict
  from studio.artifacts import artifacts_tracker
  from studio.util import util, logs
  from studio.credentials import credentials
  from studio.storage import storage_setup
  from studio.storage.storage_type import StorageType
  from studio.storage.storage_handler import StorageHandler
  from studio.storage.storage_handler_factory import StorageHandlerFactory
  from studio.storage.storage_util import tar_artifact, untar_artifact
label_desc: Use image node_id 7 for calling the Artifact obj's underlying member method code with example usage: obj.download(local_path, only_newer) and returns: self, self, local_path, local_path