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