class_docstr: Storage handler actor, provide methods like `get`, `put`, etc.
  This actor is stateful and created on worker's sub pools.
code: def _get_default_level(self, obj):
      obj = obj[0] if isinstance(obj, (list, tuple)) else obj
      if self.highest_level != StorageLevel.GPU:
          return self.highest_level
      else:  # pragma: no cover
          if cudf is not None and isinstance(
              obj, (cudf.DataFrame, cudf.Series, cudf.Index)
          ):
              return StorageLevel.GPU
          elif cupy is not None and isinstance(obj, cupy.ndarray):
              return StorageLevel.GPU
          else:
              return StorageLevel.MEMORY
  
imports: import asyncio
  import logging
  from collections import defaultdict
  from typing import Any, Dict, List, Union
  from ...None import oscar
  from ...serialization import AioDeserializer
  from ...storage import StorageLevel, get_storage_backend
  from ...storage.core import StorageFileObject
  from ...typing import BandType
  from ...utils import calc_data_size, lazy_import
  from ..cluster import ClusterAPI, StorageInfo
  from ..meta import MetaAPI
  from .core import StorageQuotaActor, DataManagerActor, DataInfo, build_data_info, WrappedStorageFileObject
  from .errors import DataNotExist, NoDataToSpill
label_desc: Use image node_id 6 for calling the StorageHandlerActor obj's underlying member method code with example usage: obj._get_default_level(obj) and returns: self, StorageLevel, StorageLevel, StorageLevel