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 __init__(self, configuration):
      # Example configuration:
      # {
      #     "driver": "dynamodb",
      #     "table": "some_table_name",
      #     "partition_key": "MyPartitionKey",
      #     "sort_key": "MySortKey",
      #     "value_key": "MyValueKey",
      #     "cache_refresh_minutes": 2,
      #     "cache_maximum_key_count": 10,
      #     "consistent_read": false,
      #     "key_delimiter": ":"
      # }
  
      super(DynamoDBDriver, self).__init__(configuration)
  
      self._dynamo_db_table = configuration["table"]
      self._dynamo_db_partition_key = configuration["partition_key"]
      self._dynamo_db_value_key = configuration["value_key"]
      self._dynamo_db_sort_key = configuration.get("sort_key", False)
      self._dynamo_consistent_read = configuration.get(
          "consistent_read", True
      )
  
      self._cache = DriverCache(
          maximum_key_count=configuration.get(
              "cache_maximum_key_count", 0
          )
      )
  
      self._cache_refresh_minutes = configuration.get(
          "cache_refresh_minutes", 3
      )
  
      self._key_delimiter = configuration.get("key_delimiter", ":")
  
      self._table = None
  
      self._dirty_rows = {}
  
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 1 to create a new DynamoDBDriver object from inherited base classes: PersistenceDriver with example: obj = DynamoDBDriver(configuration)