class_docstr: Read-Only Artifact object
class_docstr_tok: ["Read-Only","Artifact","object"]
docstr: :param bool extract_archive: If True and artifact is of type 'archive' (compressed folder),
      the returned path will be a temporary folder containing the archive content
  :param bool raise_on_error: If True and the artifact could not be downloaded,
      raise ValueError, otherwise return None on failure and output log warning.
  :param bool force_download: download file from remote even if exists in local cache
  :raise: Raises error if local copy not found.
  :return: A local path to a downloaded copy of the artifact.
docstr_tok: [":","param","bool","extract_archive",":","If","True","and","artifact","is","of","type","'archive","'","(","compressed","folder",")",",","the","returned","path","will","be","a","temporary","folder","containing","the","archive","content",":","param","bool","raise_on_error",":","If","True","and","the","artifact","could","not","be","downloaded",",","raise","ValueError",",","otherwise","return","None","on","failure","and","output","log","warning",".",":","param","bool","force_download",":","download","file","from","remote","even","if","exists","in","local","cache",":","raise",":","Raises","error","if","local","copy","not","found",".",":","return",":","A","local","path","to","a","downloaded","copy","of","the","artifact","."]
code: def get_local_copy(
      self,
      extract_archive=True,
      raise_on_error=False,
      force_download=False,
  ):
      # type: (bool, bool, bool) -> str
      """
      :param bool extract_archive: If True and artifact is of type 'archive' (compressed folder),
          the returned path will be a temporary folder containing the archive content
      :param bool raise_on_error: If True and the artifact could not be downloaded,
          raise ValueError, otherwise return None on failure and output log warning.
      :param bool force_download: download file from remote even if exists in local cache
      :raise: Raises error if local copy not found.
      :return: A local path to a downloaded copy of the artifact.
      """
      from clearml.storage import StorageManager
  
      local_copy = StorageManager.get_local_copy(
          remote_url=self.url,
          extract_archive=extract_archive and self.type == "archive",
          name=self.name,
          force_download=force_download,
      )
      if raise_on_error and local_copy is None:
          raise ValueError(
              "Could not retrieve a local copy of artifact {}, failed downloading {}".format(
                  self.name, self.url
              )
          )
  
      return local_copy
  
imports: import gzip
  import io
  import json
  import yaml
  import mimetypes
  import os
  import pickle
  from six.moves.urllib.parse import quote
  from copy import deepcopy
  from datetime import datetime
  from multiprocessing.pool import ThreadPool
  from tempfile import mkdtemp, mkstemp
  from threading import Thread
  from time import time
  from zipfile import ZipFile, ZIP_DEFLATED
  import six
  from PIL import Image
  from pathlib2 import Path
  from six.moves.urllib.parse import urlparse
  from typing import Dict, Union, Optional, Any, Sequence, Callable
  from ..backend_api import Session
  from ..backend_api.services import tasks
  from ..backend_interface.metrics.events import UploadEvent
  from ..debugging.log import LoggerRoot
  from ..storage.helper import remote_driver_schemes
  from ..storage.util import sha256sum, format_size, get_common_path
  from ..utilities.process.mp import SafeEvent, ForkSafeRLock
  from ..utilities.proxy_object import LazyEvalWrapper
label_desc: Use image node_id 12 for calling the Artifact obj's underlying member method code with example usage: obj.get_local_copy(extract_archive, raise_on_error, force_download) and returns: local_copy