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