class_docstr: Base class for all app integrations to be implemented for various services
docstr: Public method to get the expected info that this service's auth dict should contain.
  
  This public method calls the protected `_required_auth_info` and then validates its
  type to ensure the caller does not get a non-iterable result due to a poor implementation
  by a subclass.
  
  Returns:
      dict: Required authentication keys, with optional description and
          format they should follow
docstr_tok: ["Public","method","to","get","the","expected","info","that","this","service","'s","auth","dict","should","contain",".","This","public","method","calls","the","protected","`","_required_auth_info","`","and","then","validates","its","type","to","ensure","the","caller","does","not","get","a","non-iterable","result","due","to","a","poor","implementation","by","a","subclass",".","Returns",":","dict",":","Required","authentication","keys",",","with","optional","description","and","format","they","should","follow"]
code: def required_auth_info(cls):
      """Public method to get the expected info that this service's auth dict should contain.
  
      This public method calls the protected `_required_auth_info` and then validates its
      type to ensure the caller does not get a non-iterable result due to a poor implementation
      by a subclass.
  
      Returns:
          dict: Required authentication keys, with optional description and
              format they should follow
      """
      req_auth_info = cls._required_auth_info()
      return (
          req_auth_info if isinstance(req_auth_info, dict) else dict()
      )
  
imports: from abc import ABCMeta, abstractmethod, abstractproperty
  from json import JSONDecodeError
  import time
  import boto3
  from botocore.exceptions import ClientError
  import requests
  from streamalert.apps.config import AppConfig
  from streamalert.apps.batcher import Batcher
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 6 for calling the AppIntegration obj's underlying member method code with example usage: obj.required_auth_info(cls) and returns: unknown