def main()

in aristotle/aristotle.py [0:0]


def main():
    """Main method, called if run as script."""
    global aristotle_logger
    print_summary = False

    # program is run not as library so add logging to console
    aristotle_logger.addHandler(logging.StreamHandler())

    # get command line args
    try:
        parser = get_parser()
        args = parser.parse_args()
    except Exception as e:
        print_error("Problem parsing command line args: {}".format(e), fatal=True)

    if args.debug:
        aristotle_logger.setLevel(logging.DEBUG)
    elif args.suppress_warnings:
        aristotle_logger.setLevel(logging.ERROR)
    else:
        aristotle_logger.setLevel(logging.INFO)

    if args.stats is None and args.metadata_filter is None:
        print_error("'metadata_filter' or 'stats' option required. Neither provided.", fatal=True)

    if args.display_max is None:
        # option set but not max given; defaults to 16
        args.display_max = 16
        print_summary = True
    elif args.display_max == -1:
        # option not set
        print_summary = False
    else:
        print_summary = True

    # create object
    rs = Ruleset(rules=args.rules, metadata_filter=args.metadata_filter,
                 enable_all_rules=args.enable_all_rules,
                 summary_max=args.display_max,
                 output_disabled_rules=args.output_disabled_rules,
                 ignore_classtype_keyword=args.ignore_classtype_keyword,
                 ignore_filename=args.ignore_filename,
                 normalize=args.normalize,
                 enhance=args.enhance,
                 modify_metadata=args.modify_metadata,
                 pfmod_file=args.pfmod_file)

    if args.stats is None or rs.metadata_filter is not None:
        filtered_sids = rs.filter_ruleset()
    else:
        filtered_sids = [s for s in rs.metadata_dict.keys()]
    # print_debug("filtered_sids: {}".format(filtered_sids))

    pfmod_sids = None
    if rs.pfmod_file:
        pfmod_sids = rs._pfmod_apply(rs.pfmod_file, filtered_sids)
        # print_debug("pfmod_sids: {}".format(pfmod_sids))

    # if stats requested, print out stats on filtered/modified ruleset
    if args.stats is not None:
        keys = []
        keyonly = False
        rs.print_header(sids=filtered_sids)
        if len(args.stats) > 0:
            # print stats for specified key(s)
            keys = args.stats
        else:
            # print stats for ALL keys
            keys = rs.keys_dict.keys()
            keyonly = True

        for key in keys:
            rs.print_stats(key=key, keyonly=keyonly, sids=None if rs.metadata_filter is None else filtered_sids)
        print("")
        sys.exit(0)

    if args.outfile == "<stdout>":
        if print_summary:
            rs.print_ruleset_summary(filtered_sids, pfmod_sids)
        else:
            rs.output_rules(sid_list=filtered_sids, outfile=None)
    else:
        if print_summary:
            rs.print_ruleset_summary(filtered_sids, pfmod_sids)
        rs.output_rules(sid_list=filtered_sids, outfile=args.outfile)