docstr: Configure a new output for this service
  Args:
      options (argparse.Namespace): Basically a namedtuple with the service setting
      config (StreamAlert.config): The configuration of StreamAlert
  Returns:
      bool: False if errors occurred, True otherwise
docstr_tok: ["Configure","a","new","output","for","this","service","Args",":","options","(","argparse.Namespace",")",":","Basically","a","namedtuple","with","the","service","setting","config","(","StreamAlert.config",")",":","The","configuration","of","StreamAlert","Returns",":","bool",":","False","if","errors","occurred",",","True","otherwise"]
code: def handler(cls, options, config):
      """Configure a new output for this service
      Args:
          options (argparse.Namespace): Basically a namedtuple with the service setting
          config (StreamAlert.config): The configuration of StreamAlert
      Returns:
          bool: False if errors occurred, True otherwise
      """
      # Retrieve the proper service class to handle dispatching the alerts of this services
      output = StreamAlertOutput.get_dispatcher(options.service)
  
      # If an output for this service has not been defined, the error is logged
      # prior to this
      if not output:
          return False
  
      # get dictionary of OutputProperty items to be used for user prompting
      properties = output.get_user_defined_properties()
  
      for name, prop in properties.items():
          # pylint: disable=protected-access
          properties[name] = prop._replace(
              value=user_input(
                  prop.description,
                  prop.mask_input,
                  prop.input_restrictions,
              )
          )
  
      service = output.__service__
  
      if not options.update and output_exists(
          config["outputs"], properties, service
      ):
          # If the output already exists and update is not set
          # ask for user input again for a unique configuration
          return cls.handler(options, config)
  
      if not cls.save_credentials(service, config, properties):
          # Error message is already logged so no need to log a new one
          return False
  
      cls.update_config(options, config, properties, output, service)
  
      LOGGER.info(
          "Successfully saved '%s' output configuration for service '%s'",
          properties["descriptor"].value,
          service,
      )
      return True
  
imports: import json
  from streamalert.shared.logger import get_logger
  from streamalert.alert_processor.outputs.output_base import StreamAlertOutput, OutputCredentialsProvider
  from streamalert_cli.helpers import user_input, response_is_valid
  from streamalert_cli.outputs.helpers import output_exists
  from streamalert_cli.utils import CLICommand, generate_subparser
label_desc: Use image node_id 2 for calling the OutputSetSubCommand obj's underlying member method code with example usage: obj.handler(cls, options, config) and returns: True, False, cls, False