github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-core-master/cli/sawtooth_cli/sawnet.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.network_command.compare import add_compare_chains_parser 27 from sawtooth_cli.network_command.compare import do_compare_chains 28 from sawtooth_cli.network_command.list_blocks import add_list_blocks_parser 29 from sawtooth_cli.network_command.list_blocks import do_list_blocks 30 from sawtooth_cli.network_command.peers import add_peers_parser 31 from sawtooth_cli.network_command.peers import do_peers 32 33 34 DISTRIBUTION_NAME = 'sawnet' 35 36 37 def create_parser(prog_name): 38 parent_parser = create_parent_parser(prog_name) 39 40 parser = argparse.ArgumentParser( 41 description='Inspect status of a sawtooth network', 42 parents=[parent_parser],) 43 44 subparsers = parser.add_subparsers(title='subcommands', dest='subcommand') 45 subparsers.required = True 46 47 add_compare_chains_parser(subparsers, parent_parser) 48 add_list_blocks_parser(subparsers, parent_parser) 49 add_peers_parser(subparsers, parent_parser) 50 51 return parser 52 53 54 def main(prog_name=os.path.basename(sys.argv[0]), args=None, 55 with_loggers=True): 56 parser = create_parser(prog_name) 57 if args is None: 58 args = sys.argv[1:] 59 args = parser.parse_args(args) 60 61 if with_loggers is True: 62 if args.verbose is None: 63 verbose_level = 0 64 else: 65 verbose_level = args.verbose 66 setup_loggers(verbose_level=verbose_level) 67 68 if args.subcommand == 'compare-chains': 69 do_compare_chains(args) 70 elif args.subcommand == 'list-blocks': 71 do_list_blocks(args) 72 elif args.subcommand == 'peers': 73 do_peers(args) 74 else: 75 raise CliException('Invalid command: {}'.format(args.subcommand)) 76 77 78 def main_wrapper(): 79 # pylint: disable=bare-except 80 try: 81 main() 82 except CliException as e: 83 print("Error: {}".format(e), file=sys.stderr) 84 sys.exit(1) 85 except KeyboardInterrupt: 86 pass 87 except BrokenPipeError: 88 sys.stderr.close() 89 except SystemExit as e: 90 raise e 91 except: 92 traceback.print_exc(file=sys.stderr) 93 sys.exit(1) 94 95 96 def create_console_handler(verbose_level): 97 clog = logging.StreamHandler() 98 formatter = ColoredFormatter( 99 "%(log_color)s[%(asctime)s %(levelname)-8s%(module)s]%(reset)s " 100 "%(white)s%(message)s", 101 datefmt="%H:%M:%S", 102 reset=True, 103 log_colors={ 104 'DEBUG': 'cyan', 105 'INFO': 'green', 106 'WARNING': 'yellow', 107 'ERROR': 'red', 108 'CRITICAL': 'red', 109 }) 110 111 clog.setFormatter(formatter) 112 113 if verbose_level == 0: 114 clog.setLevel(logging.WARN) 115 elif verbose_level == 1: 116 clog.setLevel(logging.INFO) 117 else: 118 clog.setLevel(logging.DEBUG) 119 120 return clog 121 122 123 def setup_loggers(verbose_level): 124 logger = logging.getLogger() 125 logger.setLevel(logging.DEBUG) 126 logger.addHandler(create_console_handler(verbose_level)) 127 128 129 def create_parent_parser(prog_name): 130 parent_parser = argparse.ArgumentParser(prog=prog_name, add_help=False) 131 parent_parser.add_argument( 132 '-v', '--verbose', 133 action='count', 134 help='enable more verbose output') 135 136 try: 137 version = pkg_resources.get_distribution(DISTRIBUTION_NAME).version 138 except pkg_resources.DistributionNotFound: 139 version = 'UNKNOWN' 140 141 parent_parser.add_argument( 142 '-V', '--version', 143 action='version', 144 version=(DISTRIBUTION_NAME + ' (Hyperledger Sawtooth) version {}') 145 .format(version), 146 help='display version information') 147 148 return parent_parser