docstr: Generate a skeleton file for use with set-from-file
  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: ["Generate","a","skeleton","file","for","use","with","set-from-file","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):
      """Generate a skeleton file for use with set-from-file
      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
      """
  
      skeleton = {}
      for service in options.services:
          # Retrieve the proper service class to handle dispatching the alerts of this services
          # No need to safeguard, as choices are defined on --services
          output = StreamAlertOutput.get_dispatcher(service)
  
          # get dictionary of OutputProperty items to be used for user prompting
          properties = output.get_user_defined_properties()
          skeleton[service] = [
              {
                  name: "desc: {}, restrictions: {}".format(
                      prop.description, prop.input_restrictions
                  )
                  for name, prop in properties.items()
              }
          ]
  
      try:
          with open(options.file, "w") as json_file_fp:
              json.dump(
                  skeleton, json_file_fp, indent=2, sort_keys=True
              )
      except Exception as err:  # pylint: disable=broad-except
          LOGGER.error(err)
          return False
  
      LOGGER.info(
          "Successfully generated the Skeleton file %s for services: %s",
          options.file,
          options.services,
      )
      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 OutputGenerateSkeletonSubCommand obj's underlying member method code with example usage: obj.handler(cls, options, config) and returns: True, False