Source code for asn1vnparser.cli

# -*- coding: utf-8 -*-

"""Console script for asn1vnparser."""
import argparse
import json
import pathlib
import sys

import asn1vnparser


[docs]def main(orig_args=None): """Console script for asn1vnparser. See `python cli.py --help`.""" parser = argparse.ArgumentParser( prog='asn1vnparser', description='Prints out Python object (repr) or JSON for an ASN.1 value.') g_multi_not_support_value_only = parser.add_mutually_exclusive_group() parser.add_argument('input_file', nargs='?', default='-', help='input file path. Pass - (a single hypehn) to read from stdin.') parser.add_argument('-e', '--encoding', default=None, help='input file encoding') g_multi_not_support_value_only.add_argument('-m', '--multi', action='store_true', help='parses multiple ASN.1 value assignments into a list. When -m is specified, -v is not supported.') g_multi_not_support_value_only.add_argument('-v', '--value_only', action='store_true', help='parses an ASN.1 value (e.g. "3"), not a value assignment (e.g. "value Type ::= 3")') parser.add_argument('-j', '--json', action='store_true', help='prints out JSON obejct. By default, this program prints out repr() of the resulting python object.') parser.add_argument('-o', '--output_file', nargs='?', default=None, help='output file path. By default this program prints the result to stdout.') parser.add_argument('-f', '--force', action='store_true', help='force to overwrite an existing file.') args = parser.parse_args(orig_args) if args.input_file == '-': input_str = sys.stdin.read() else: input_str = pathlib.Path(args.input_file).read_text( encoding=args.encoding) if args.value_only: ret_value = asn1vnparser.parse_asn1_value(input_str, as_json=args.json) elif args.multi: ret_value = asn1vnparser.parse_asn1_value_assignments( input_str, as_json=args.json) else: ret_value = asn1vnparser.parse_asn1_value_assignment( input_str, as_json=args.json) if args.json: ret_str = ret_value else: ret_str = repr(ret_value) if args.output_file: output_path = pathlib.Path(args.output_file) if args.force or not output_path.exists(): output_path.write_text(ret_str) else: raise FileExistsError( 'output file already exists: {}'.format(args.output_file)) else: print(ret_str) return 0
if __name__ == "__main__": sys.exit(main()) # pragma: no cover