code: def retry_on_exception(exceptions):
      """Decorator function to attempt retry based on passed exceptions"""
  
      def real_decorator(func):
          """Actual decorator to retry on exceptions"""
  
          @backoff.on_exception(
              backoff.expo,
              exceptions,  # This is a tuple with exceptions
              max_tries=OutputDispatcher.MAX_RETRY_ATTEMPTS,
              jitter=backoff.full_jitter,
              on_backoff=backoff_handler(),
              on_success=success_handler(),
              on_giveup=giveup_handler(),
          )
          def wrapper(*args, **kwargs):
              return func(*args, **kwargs)
  
          return wrapper
  
      return real_decorator
  
imports: from abc import ABCMeta, abstractmethod
  from collections import namedtuple
  import requests
  from requests.exceptions import Timeout
  import urllib3
  import backoff
  from streamalert.alert_processor.outputs.credentials.provider import OutputCredentialsProvider
  from streamalert.shared.backoff_handlers import backoff_handler, success_handler, giveup_handler
  from streamalert.shared.helpers.boto import REGION
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 1 for calling a global function with example usage: retry_on_exception(exceptions) and returns: real_decorator, wrapper, func