code: def _resolve_version(self, spec: AssetSpec) -> None:
      local_versions = self._list_local_versions(spec)
      logger.debug("Local versions", local_versions=local_versions)
  
      if spec.is_version_complete():
          return
  
      remote_versions = []
      if self.storage_provider:
          remote_versions = self.storage_provider.get_versions_info(
              spec.name
          )
          logger.debug(
              "Fetched remote versions", remote_versions=remote_versions
          )
  
      all_versions = spec.sort_versions(
          version_list=set(local_versions + remote_versions)
      )
  
      if not all_versions:
          if not spec.version:
              logger.debug("Asset has no version information")
              # no version is specified and none exist
              # in this case, the asset spec is likely a relative or absolute
              # path to a file/directory
              return None
  
          raise errors.LocalAssetDoesNotExistError(
              name=spec.name,
              version=spec.version,
              local_versions=local_versions,
          )
  
      # at least one version info is missing, update to the latest
      spec.set_latest_version(all_versions)
  
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 3 for calling the AssetsManager obj's underlying member method code with example usage: obj._resolve_version(spec) and returns: None