class_docstr: OutputDispatcher is the base class to handle routing alerts to outputs
  
  Public methods:
      format_output_config: returns a formatted version of the outputs configuration
          that is to be written to disk
      get_user_defined_properties: returns any properties for this output that must be
          provided by the user. must be implemented by subclasses
      dispatch: handles the actual sending of alerts to the configured service. must
          be implemented by subclass
docstr: Base method for retrieving properties that must be assigned by the user when
  configuring a new output for this service. This should include any information that
  is sensitive or use-case specific. For intance, if the url needed for this integration
  is unique to your situation, it should be supplied here.
  
  If information of this sort is needed, it should be added to the method that
  overrides this one in the subclass.
  
  At the very minimum, subclass functions should return an OrderedDict that contains
  the key 'descriptor' with a description of the integration being configured
  
  Returns:
      OrderedDict: Contains various OutputProperty items
docstr_tok: ["Base","method","for","retrieving","properties","that","must","be","assigned","by","the","user","when","configuring","a","new","output","for","this","service",".","This","should","include","any","information","that","is","sensitive","or","use-case","specific",".","For","intance",",","if","the","url","needed","for","this","integration","is","unique","to","your","situation",",","it","should","be","supplied","here",".","If","information","of","this","sort","is","needed",",","it","should","be","added","to","the","method","that","overrides","this","one","in","the","subclass",".","At","the","very","minimum",",","subclass","functions","should","return","an","OrderedDict","that","contains","the","key","'descriptor","'","with","a","description","of","the","integration","being","configured","Returns",":","OrderedDict",":","Contains","various","OutputProperty","items"]
code: def get_user_defined_properties(cls):
      """Base method for retrieving properties that must be assigned by the user when
      configuring a new output for this service. This should include any information that
      is sensitive or use-case specific. For intance, if the url needed for this integration
      is unique to your situation, it should be supplied here.
  
      If information of this sort is needed, it should be added to the method that
      overrides this one in the subclass.
  
      At the very minimum, subclass functions should return an OrderedDict that contains
      the key 'descriptor' with a description of the integration being configured
  
      Returns:
          OrderedDict: Contains various OutputProperty items
      """
  
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 15 for calling the OutputDispatcher obj's underlying member method code with example usage: obj.get_user_defined_properties(cls) without return types