code: def run(self) -> Optional[ExplorePermalinkValue]:
      self.validate()
      try:
          key = decode_permalink_id(self.key, salt=self.salt)
          value: Optional[ExplorePermalinkValue] = GetKeyValueCommand(
              resource=self.resource,
              key=key,
              codec=self.codec,
          ).run()
          if value:
              chart_id: Optional[int] = value.get("chartId")
              # keep this backward compatible for old permalinks
              datasource_id: int = (
                  value.get("datasourceId")
                  or value.get("datasetId")
                  or 0
              )
              datasource_type = DatasourceType(
                  value.get("datasourceType", DatasourceType.TABLE)
              )
              check_chart_access(
                  datasource_id, chart_id, datasource_type
              )
              return value
          return None
      except (
          DatasetNotFoundError,
          KeyValueCodecDecodeException,
          KeyValueGetFailedError,
          KeyValueParseKeyError,
      ) as ex:
          raise ExplorePermalinkGetFailedError(
              message=ex.message
          ) from ex
      except SQLAlchemyError as ex:
          logger.exception("Error running get command")
          raise ExplorePermalinkGetFailedError() from ex
  
file_path: superset/superset/commands/explore/permalink/get.py
imports: import logging
  from typing import Optional
  from sqlalchemy.exc import SQLAlchemyError
  from superset.commands.dataset.exceptions import DatasetNotFoundError
  from superset.commands.explore.permalink.base import BaseExplorePermalinkCommand
  from superset.commands.key_value.get import GetKeyValueCommand
  from superset.explore.permalink.exceptions import ExplorePermalinkGetFailedError
  from superset.explore.permalink.types import ExplorePermalinkValue
  from superset.explore.utils import check_access
  from superset.key_value.exceptions import KeyValueCodecDecodeException, KeyValueGetFailedError, KeyValueParseKeyError
  from superset.key_value.utils import decode_permalink_id
  from superset.utils.core import DatasourceType
label_desc: Use image node_id 2 for calling the GetExplorePermalinkCommand obj's underlying member method code with example usage: obj.run() and returns: None, value