class_docstr: DynamoDBDriver
  
  This driver is backed by DynamoDB, using it primarily as a key-value store. It is customizable,
  allowing the configuration to specify which column(s) that the partition/sort keys are named,
  as well as the "value" column.
  
  (!) NOTE: Currently, both the partition key and the sort key *MUST* be string types. It is
      not possible to have a non-string type for either of these.
class_docstr_tok: ["DynamoDBDriver","This","driver","is","backed","by","DynamoDB",",","using","it","primarily","as","a","key-value","store",".","It","is","customizable",",","allowing","the","configuration","to","specify","which","column","(","s",")","that","the","partition\/sort","keys","are","named",",","as","well","as","the","``","value","''","column",".","(","!",")","NOTE",":","Currently",",","both","the","partition","key","and","the","sort","key","*","MUST","*","be","string","types",".","It","is","not","possible","to","have","a","non-string","type","for","either","of","these","."]
code: def _load(self, key):
      key_schema = self._convert_key_to_key_schema(key)
  
      if LOGGER_DEBUG_ENABLED:
          # Guard json.dumps calls due to its expensive computation
          LOGGER.debug(
              "LookupTable (%s): Loading key '%s' with schema (%s)",
              self.id,
              key,
              json.dumps(key_schema),
          )
  
      try:
          get_item_args = {
              "Key": key_schema,
              # It's not urgently vital to do consistent reads; we accept that for some time we
              # may get out-of-date reads.
              "ConsistentRead": False,
              # FIXME (derek.wang) This should have a ProjectionExpression to prevent the
              #  response from returning irrelevant fields.
          }
  
          if LOGGER_DEBUG_ENABLED:
              get_item_args["ReturnConsumedCapacity"] = "TOTAL"
  
          # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services
          #       /dynamodb.html#DynamoDB.Table.get_item
          response = self._table.get_item(**get_item_args)
  
      except (ConnectTimeoutError, ReadTimeoutError):
          # Catching timeouts
          LOGGER.error(
              "LookupTable (%s): Reading from DynamoDB timed out",
              self.id,
          )
          raise LookupTablesInitializationError(
              "LookupTable ({}): Reading from DynamoDB timed out".format(
                  self.id
              )
          )
  
      if "Item" not in response:
          self._cache.set_blank(key, self._cache_refresh_minutes)
          return
  
      if self._dynamo_db_value_key not in response["Item"]:
          self._cache.set_blank(key, self._cache_refresh_minutes)
          LOGGER.error(
              "LookupTable (%s): Requested value key %s seems to be missing from the table.",
              self.id,
              self._dynamo_db_value_key,
          )
          return
  
      self._cache.set(
          key,
          response["Item"][self._dynamo_db_value_key],
          self._cache_refresh_minutes,
      )
  
imports: import json
  import logging
  import boto3
  from botocore.exceptions import ClientError, ConnectTimeoutError, ReadTimeoutError
  import streamalert.shared.helpers.boto
  from streamalert.shared.logger import get_logger
  from streamalert.shared.lookup_tables.cache import DriverCache
  from streamalert.shared.lookup_tables.drivers import PersistenceDriver
  from streamalert.shared.lookup_tables.errors import LookupTablesInitializationError
label_desc: Use image node_id 9 for calling the DynamoDBDriver obj's underlying member method code with example usage: obj._load(key) without return types