code: def _download_image(self, image_id, check_zip=False) -> str:
      project, subject, experiment, scan = self._id_to_fields(image_id)
      if self.projects and project not in self.projects:
          logger.info(
              f"Access to Project: {project} is restricted;  Allowed: {self.projects}"
          )
          return ""
  
      # Check in Asset Store
      if self.asset_path and not check_zip:
          dicom_dir = self._find_in_asset_store(
              project, subject, experiment, scan
          )
          if dicom_dir:
              logger.info(f"Exists in asset store: {self.asset_path}")
              return dicom_dir
  
      # Check in Local Cache
      dest_dir = os.path.join(
          self.cache_path, project, subject, experiment, scan
      )
      dest_zip = os.path.join(dest_dir, "files.zip")
      dicom_dir = os.path.join(dest_dir, "DICOM")
      if os.path.exists(dest_zip) and len(os.listdir(dicom_dir)) > 0:
          logger.info(f"Exists in cache: {dest_zip}")
          return dicom_dir
  
      # Download DICOM Zip
      logger.info(
          f"Downloading: {project} => {subject} => {experiment} => {scan} => {dest_zip}"
      )
      start = time.time()
  
      self._download_zip(
          dest_dir,
          dest_zip,
          dicom_dir,
          project,
          subject,
          experiment,
          scan,
      )
      logger.info(
          f"Download Time (ms) for {image_id}: {round(time.time() - start, 4)}"
      )
      return dicom_dir
  
imports: import io
  import logging
  import os
  import pathlib
  import shutil
  import time
  from typing import Any, Dict, List, Optional
  from urllib.parse import quote_plus
  from xml.etree import ElementTree
  import requests
  from requests.auth import HTTPBasicAuth
  from monailabel.datastore.utils.convert import nifti_to_dicom_seg
  from monailabel.interfaces.datastore import Datastore
  from monailabel.utils.others.generic import md5_digest
label_desc: Use image node_id 31 for calling the XNATDatastore obj's underlying member method code with example usage: obj._download_image(image_id, check_zip) and returns: dicom_dir, str, dicom_dir, dicom_dir