class_docstr: Adapter class that manages uploading data to and downloading data from AWS S3
docstr: Return: bytes
docstr_tok: ["Return",":","bytes"]
code: def download(self):
      """
      Return: bytes
      """
      try:
          start_time = time.time()
          s3_object = self._s3_client.Object(
              self._s3_bucket, self._s3_key
          ).get()
          bytes_data = s3_object.get("Body").read()
  
          total_time = time.time() - start_time
          size_kb = round(s3_object.get("ContentLength") / 1024.0, 2)
          size_mb = round(size_kb / 1024.0, 2)
          LOGGER.debug(
              "LookupTable (%s): Downloaded S3 file size %s in %s seconds",
              self._driver.id,
              "{}MB".format(size_mb)
              if size_mb
              else "{}KB".format(size_kb),
              round(total_time, 2),
          )
  
          return bytes_data
      except ClientError as err:
          LOGGER.error(
              "LookupTable (%s): Encountered error while downloading %s from %s: %s",
              self._driver.id,
              self._s3_key,
              self._s3_bucket,
              err.response["Error"]["Message"],
          )
          raise LookupTablesInitializationError(
              "LookupTable S3 Driver Failed with Message: {}".format(
                  err.response["Error"]["Message"]
              )
          )
  
      except (ConnectTimeoutError, ReadTimeoutError):
          # Catching ConnectTimeoutError and ReadTimeoutError from botocore
          LOGGER.error(
              "LookupTable (%s): Reading from S3 timed out",
              self._driver.id,
          )
          raise LookupTablesInitializationError(
              "LookupTable ({}): Reading from S3 timed out".format(
                  self._driver.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 3 for calling the S3Adapter obj's underlying member method code with example usage: obj.download() and returns: bytes_data