code: def _fetch_asset(self, spec: AssetSpec, _force_download=False):
      with ContextualizedLogging(name=spec.name):
          self._resolve_version(spec)
          with ContextualizedLogging(version=spec.version):
              logger.debug(
                  "Resolved latest version", version=spec.version
              )
              return self._fetch_asset_version(spec, _force_download)
  
imports: import os
  import shutil
  import typing
  from typing import Any, Dict, List, Optional, Union, cast
  import filelock
  from structlog import get_logger
  from modelkit.assets import errors
  from modelkit.assets.drivers.local import LocalStorageDriver
  from modelkit.assets.remote import NoConfiguredProviderError, StorageProvider
  from modelkit.assets.settings import AssetSpec
  from modelkit.utils.logging import ContextualizedLogging
label_desc: Use image node_id 2 for calling the AssetsManager obj's underlying member method code with example usage: obj._fetch_asset(spec, _force_download) and returns: self