code: def _list_card_data(
      self, card_type=None, card_hash=None, card_id=None
  ):
      card_data_paths = self._backend.list_content(
          [self._get_data_read_path()]
      )
      data_found = []
  
      for data_path in card_data_paths:
          _pth = data_path.path
          card_info = self.info_from_path(
              _pth, suffix=CardNameSuffix.DATA
          )
          if card_type is not None and card_info.type != card_type:
              continue
          elif card_hash is not None:
              if not card_info.hash.startswith(card_hash):
                  continue
          elif card_id is not None and card_info.id != card_id:
              continue
          if data_path.is_file:
              data_found.append(_pth)
  
      return data_found
  
imports: from collections import namedtuple
  from io import BytesIO
  import os
  import json
  import shutil
  from metaflow.plugins.datastores.local_storage import LocalStorage
  from metaflow.metaflow_config import CARD_S3ROOT, CARD_LOCALROOT, DATASTORE_LOCAL_DIR, CARD_SUFFIX, CARD_AZUREROOT, CARD_GSROOT, SKIP_CARD_DUALWRITE
  import metaflow.metaflow_config
  from .exception import CardNotPresentException
label_desc: Use image node_id 13 for calling the CardDatastore obj's underlying member method code with example usage: obj._list_card_data(card_type, card_hash, card_id) and returns: data_found