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: Uses the "cache_refresh_minutes" option to determine whether or not the current LookupTable
  should be re-fetched from S3.
  
  If it needs a reload, this method will appropriately call reload.
docstr_tok: ["Uses","the","``","cache_refresh_minutes","''","option","to","determine","whether","or","not","the","current","LookupTable","should","be","re-fetched","from","S3",".","If","it","needs","a","reload",",","this","method","will","appropriately","call","reload","."]
code: def _reload_if_necessary(self):
      """
      Uses the "cache_refresh_minutes" option to determine whether or not the current LookupTable
      should be re-fetched from S3.
  
      If it needs a reload, this method will appropriately call reload.
      """
      if self._cache_clock.has(
          self._MAGIC_CACHE_TTL_KEY
      ) and self._cache_clock.get(self._MAGIC_CACHE_TTL_KEY, False):
          LOGGER.debug(
              "LookupTable (%s): Does not need refresh. TTL: %s",
              self.id,
              self._cache_clock.ttl(self._MAGIC_CACHE_TTL_KEY),
          )
  
      else:
          LOGGER.info(
              "LookupTable (%s): Needs refresh, starting now.", self.id
          )
          self._reload()
  
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 8 for calling the S3Driver obj's underlying member method code with example usage: obj._reload_if_necessary() without return types