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 driver_type(self):
      return self.TYPE_S3
  
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 2 for calling the S3Driver obj's underlying member method code with example usage: obj.driver_type() and returns: self