class_docstr: A repository mapping names -> publishers
  
  As a usability optimization, using this Repository will eagerly load and register all
  publishers in the application.
class_docstr_tok: ["A","repository","mapping","names","-",">","publishers","As","a","usability","optimization",",","using","this","Repository","will","eagerly","load","and","register","all","publishers","in","the","application","."]
docstr: Assembles a single publisher that combines logic from multiple publishers
  
  Args:
      publisher_names (list(str)): A list of string names of publishers
  
  Return:
      CompositePublisher|DefaultPublisher
docstr_tok: ["Assembles","a","single","publisher","that","combines","logic","from","multiple","publishers","Args",":","publisher_names","(","list","(","str",")",")",":","A","list","of","string","names","of","publishers","Return",":","CompositePublisher|DefaultPublisher"]
code: def create_composite_publisher(cls, publisher_names):
      """Assembles a single publisher that combines logic from multiple publishers
  
      Args:
          publisher_names (list(str)): A list of string names of publishers
  
      Return:
          CompositePublisher|DefaultPublisher
      """
      publisher_names = publisher_names or []
      publishers = []
  
      for publisher_name in publisher_names:
          publisher = cls.get_publisher(publisher_name)
          if publisher:
              publishers.append(publisher)
  
      if not publishers:
          # If no publishers were given, or if all of the publishers failed to load, then we
          # load a default publisher.
          default_publisher_name = cls.get_publisher_name(
              DefaultPublisher
          )
          return cls.get_publisher(default_publisher_name)
  
      return CompositePublisher(publishers)
  
imports: from abc import abstractmethod
  from copy import deepcopy
  from inspect import isclass
  from streamalert.shared.config import load_config
  from streamalert.shared.importer import import_folders
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 8 for calling the AlertPublisherRepository obj's underlying member method code with example usage: obj.create_composite_publisher(cls, publisher_names) and returns: CompositePublisher, cls