Source code for stix2generator.language.build_stix

import argparse
import configparser
import json

import stix2generator
import stix2generator.language.builder
import stix2generator.generation.object_generator
import stix2generator.logging


[docs]def parse_args(): arg_parser = argparse.ArgumentParser( description="""Create STIX content from the STIX prototyping language""" ) arg_parser.add_argument("language-file", help=""" The file containing STIX prototyping language """ ) arg_parser.add_argument("-b", "--bundle", help="Create a bundle", action="store_true" ) arg_parser.add_argument("-e", "--encoding", help=""" Encoding to use when reading text files, e.g. STIX prototyping language, custom generator specifications, etc. Default=%(default)s """, default="utf-8" ) arg_parser.add_argument("-v", "--verbose", help=""" Enable verbose diagnostic output. Repeat for increased verbosity. """, action="count" ) arg_parser.add_argument("--stix-version", help="STIX version to use. Default=%(default)s", choices=["2.0", "2.1"], default="2.1" ) arg_parser.add_argument("--extra-specs", help="""A JSON file with extra object generator specifications. These will be merged with the built-in specifications, and made available for use in prototyping language content. """ ) arg_parser.add_argument("-n", "--embed-variable-names", help="""Embed variable names in generated objects using a custom property. """, action="store_true" ) arg_parser.add_argument("-c", "--config", help="""Config file with options to customize how content is generated. """, ) args = arg_parser.parse_args() return args
[docs]def main(): args = parse_args() stix2generator.logging.config_logging(args.verbose) proto_lang_file = getattr(args, "language-file") with open(proto_lang_file, "r", encoding=args.encoding) as f: proto_lang = f.read() extra_specs = None if args.extra_specs: with open(args.extra_specs, "r", encoding=args.encoding) as f: extra_specs = json.load(f) tmp_config = {} if args.config: config_parser = configparser.SafeConfigParser() config_parser.read(args.config) tmp_config = config_parser['main'] generator_config = stix2generator.generation.object_generator.Config( **tmp_config ) processor = stix2generator.create_default_language_processor( generator_config, extra_specs, args.stix_version ) stix_objs = processor.build_graph( proto_lang, embed_variable_names=args.embed_variable_names ) if args.bundle: bundle = stix2generator.utils.make_bundle( stix_objs, args.stix_version ) print(bundle.serialize(pretty=True)) else: for obj in stix_objs: print(obj.serialize(pretty=True))
if __name__ == "__main__": main()