code: def __init__(self, art_name, art_dict, logger=None):
      self.name = art_name
      self.key: str = None
      self.local_path: str = None
      self.remote_path: str = None
      self.credentials = None
      self.hash = None
  
      self.logger = logger
      if self.logger is None:
          self.logger = logs.get_logger(self.__class__.__name__)
          self.logger.setLevel(
              storage_setup.get_storage_verbose_level()
          )
  
      self.storage_handler: StorageHandler = None
  
      self.unpack: bool = art_dict.get("unpack")
      self.is_mutable: bool = art_dict.get("mutable")
      if "key" in art_dict.keys():
          self.key = art_dict["key"]
      if "local" in art_dict.keys():
          self.local_path = art_dict["local"]
      if "qualified" in art_dict.keys():
          self.remote_path = art_dict["qualified"]
      if "url" in art_dict.keys():
          self.remote_path = art_dict["url"]
      if "hash" in art_dict.keys():
          self.hash = art_dict["hash"]
      self.credentials = credentials.Credentials.get_credentials(
          art_dict
      )
  
      self._setup_storage_handler(art_dict)
  
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 1 to create a new Artifact object  with example: obj = Artifact(art_name, art_dict, logger)