code: def get_card_location(
      cls,
      base_path,
      card_name,
      uuid,
      card_id=None,
      suffix=CardNameSuffix.CARD,
  ):
      chash = uuid
      if card_id is None:
          card_file_name = "%s-%s.%s" % (card_name, chash, suffix)
      else:
          card_file_name = "%s-%s-%s.%s" % (
              card_name,
              card_id,
              chash,
              suffix,
          )
      return os.path.join(base_path, card_file_name)
  
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 3 for calling the CardDatastore obj's underlying member method code with example usage: obj.get_card_location(cls, base_path, card_name, uuid, card_id, suffix) and returns: os