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.
docstr: Reaches to AWS S3, downloads the relevant data file, decompresses, decodes, and caches
  the file's contents into memory.
docstr_tok: ["Reaches","to","AWS","S3",",","downloads","the","relevant","data","file",",","decompresses",",","decodes",",","and","caches","the","file","'s","contents","into","memory","."]
code: def _reload(self):
      """
      Reaches to AWS S3, downloads the relevant data file, decompresses, decodes, and caches
      the file's contents into memory.
      """
      # First, download the item from S3
      bytes_data = self._s3_adapter.download()
  
      # The lookup data can optionally be compressed, so try to decompress
      # This will fall back and use the original data if decompression fails
      if self._compression:
          bytes_data = Compression.gz_decompress(self, bytes_data)
      else:
          LOGGER.debug(
              "LookupTable (%s): File does not need decompression"
          )
  
      # Decode the data; right now we make the assumption that the data is always encoded
      # as JSON.
      data = Encoding.json_decode(self, bytes_data)
  
      # We don't do per-key cache TTLs; instead, we use a single global cache TTL that's set
      # as a "True" value in the magic key
      self._cache.setall(data, 9999)
      self._cache_clock.set(
          self._MAGIC_CACHE_TTL_KEY, True, self._cache_refresh_minutes
      )
      LOGGER.info("LookupTable (%s): Successfully loaded", 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 9 for calling the S3Driver obj's underlying member method code with example usage: obj._reload() without return types