class_docstr: S3Driver
  
  This PersistenceDriver uses AWS S3 as the backing layer. The entire table is stored in a single
  large S3 file.
  
  Upon initialization, the S3 file is loaded, decompressed, decoded, and loaded into memory as
  a Python dict.
  
  To improve performance, the decoded contents of the S3 file are cached in-memory for up to
  "cache_refresh_minutes" in minutes of time, after which they are reloaded from S3.
  
  (!) NOTE: Tweaking the cache_refresh_minutes will likely not help memory performance of your
      LookupTable. If you are having memory issues on your Lambda, try using the DynamoDBDriver.
code: def commit(self):
      if not self._dirty:
          LOGGER.warning(
              "LookupTable (%s): Empty commit; no records dirtied",
              self.id,
          )
          return
  
      data = Encoding.json_encode(self, self._cache.getall())
  
      # Compression
      if self._compression:
          data = Compression.gz_compress(self, data)
      else:
          LOGGER.debug(
              "LookupTable (%s): File does not need decompression"
          )
  
      # Upload to S3
      self._s3_adapter.upload(data)
  
      # Invalidate the cache key by setting a "False" value into the magic key
      self._cache_clock.set(self._MAGIC_CACHE_TTL_KEY, False, 9999)
      self._dirty = False
  
      LOGGER.info(
          "LookupTable (%s): Successfully uploaded new data", self.id
      )
  
imports: import json
  import sys
  import time
  import zlib
  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 LookupTablesCommitError, LookupTablesInitializationError
label_desc: Use image node_id 5 for calling the S3Driver obj's underlying member method code with example usage: obj.commit() without return types