github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-core-master/cli/sawtooth_cli/sawadm.py (about) 1 # Copyright 2017 Intel Corporation 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 # ------------------------------------------------------------------------------ 15 16 import argparse 17 import logging 18 import os 19 import traceback 20 import sys 21 import pkg_resources 22 23 from colorlog import ColoredFormatter 24 25 from sawtooth_cli.exceptions import CliException 26 from sawtooth_cli.admin_command.genesis import add_genesis_parser 27 from sawtooth_cli.admin_command.genesis import do_genesis 28 from sawtooth_cli.admin_command.keygen import add_keygen_parser 29 from sawtooth_cli.admin_command.keygen import do_keygen 30 31 32 DISTRIBUTION_NAME = 'sawadm' 33 34 35 def create_parser(prog_name): 36 parent_parser = create_parent_parser(prog_name) 37 38 parser = argparse.ArgumentParser( 39 description='Provides subcommands to create validator keys and ' 40 'create the genesis block', 41 parents=[parent_parser],) 42 43 subparsers = parser.add_subparsers(title='subcommands', dest='subcommand') 44 subparsers.required = True 45 46 add_genesis_parser(subparsers, parent_parser) 47 add_keygen_parser(subparsers, parent_parser) 48 49 return parser 50 51 52 def main(prog_name=os.path.basename(sys.argv[0]), args=None, 53 with_loggers=True): 54 parser = create_parser(prog_name) 55 if args is None: 56 args = sys.argv[1:] 57 args = parser.parse_args(args) 58 59 if with_loggers is True: 60 if args.verbose is None: 61 verbose_level = 0 62 else: 63 verbose_level = args.verbose 64 setup_loggers(verbose_level=verbose_level) 65 66 if args.subcommand == 'genesis': 67 do_genesis(args) 68 elif args.subcommand == 'keygen': 69 do_keygen(args) 70 else: 71 raise CliException('Invalid command: {}'.format(args.subcommand)) 72 73 74 def main_wrapper(): 75 # pylint: disable=bare-except 76 try: 77 main() 78 except CliException as e: 79 print("Error: {}".format(e), file=sys.stderr) 80 sys.exit(1) 81 except KeyboardInterrupt: 82 pass 83 except BrokenPipeError: 84 sys.stderr.close() 85 except SystemExit as e: 86 raise e 87 except: 88 traceback.print_exc(file=sys.stderr) 89 sys.exit(1) 90 91 92 def create_console_handler(verbose_level): 93 clog = logging.StreamHandler() 94 formatter = ColoredFormatter( 95 "%(log_color)s[%(asctime)s %(levelname)-8s%(module)s]%(reset)s " 96 "%(white)s%(message)s", 97 datefmt="%H:%M:%S", 98 reset=True, 99 log_colors={ 100 'DEBUG': 'cyan', 101 'INFO': 'green', 102 'WARNING': 'yellow', 103 'ERROR': 'red', 104 'CRITICAL': 'red', 105 }) 106 107 clog.setFormatter(formatter) 108 109 if verbose_level == 0: 110 clog.setLevel(logging.WARN) 111 elif verbose_level == 1: 112 clog.setLevel(logging.INFO) 113 else: 114 clog.setLevel(logging.DEBUG) 115 116 return clog 117 118 119 def setup_loggers(verbose_level): 120 logger = logging.getLogger() 121 logger.setLevel(logging.DEBUG) 122 logger.addHandler(create_console_handler(verbose_level)) 123 124 125 def create_parent_parser(prog_name): 126 parent_parser = argparse.ArgumentParser(prog=prog_name, add_help=False) 127 parent_parser.add_argument( 128 '-v', '--verbose', 129 action='count', 130 help='enable more verbose output') 131 132 try: 133 version = pkg_resources.get_distribution(DISTRIBUTION_NAME).version 134 except pkg_resources.DistributionNotFound: 135 version = 'UNKNOWN' 136 137 parent_parser.add_argument( 138 '-V', '--version', 139 action='version', 140 version=(DISTRIBUTION_NAME + ' (Hyperledger Sawtooth) version {}') 141 .format(version), 142 help='display version information') 143 144 return parent_parser