From 73fa74a35b6685eae33e5e48f950ce73b3fc5634 Mon Sep 17 00:00:00 2001 From: Florian Stecker Date: Thu, 30 Oct 2025 16:23:20 -0400 Subject: [PATCH] rearrange options and make output cleaner --- iavlread | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/iavlread b/iavlread index e988efd..d3966cd 100755 --- a/iavlread +++ b/iavlread @@ -67,39 +67,34 @@ def get_args(): parser.add_argument('-d', '--database', help='Path to database (application.db folder)') parser.add_argument('-H', '--height', type=int, help='Block height') - parser.add_argument('-k', '--keyformat', help='Key format for maps (e.g. Qss)') - parser.add_argument('-v', '--valueformat', help='Value format') + # parser.add_argument('-j', '--json', action='store_true', help='JSON output') + + def add_key_cmd(subparsers, cmd, help, optional: bool): + subp = subparsers.add_parser(cmd, help = help) + subp.add_argument('-k', '--keyformat', help='Key format for maps (e.g. Qss)') + subp.add_argument('-v', '--valueformat', help='Value format') + subp.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') + subp.add_argument('key', nargs='*' if optional else '+', help = 'Key parts') + return subp subparsers = parser.add_subparsers(required=True, dest='cmd') p_max_height = subparsers.add_parser('max_height', help = 'Get the max block height in the snapshot') p_max_height.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') p_min_height = subparsers.add_parser('min_height', help = 'Get the min block height in the snapshot') p_min_height.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') - p_get = subparsers.add_parser('get', help = 'Retrieve a single item') - p_get.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') - p_get.add_argument('key', nargs='+', help = 'Key parts') - p_hist = subparsers.add_parser('history', help = 'Get all stored past values of the item') - p_hist.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') - p_hist.add_argument('key', nargs='+', help = 'Key parts') - p_count = subparsers.add_parser('count', help = 'Count number of items with a prefix') - p_count.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') - p_count.add_argument('key', nargs='*', help = 'Key parts') - p_iterate = subparsers.add_parser('iterate', help = 'Iterate over items with some prefix') - p_iterate.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') - p_iterate.add_argument('key', nargs='*', help = 'Key parts') - p_iterate = subparsers.add_parser('iterate_keys', help = 'Iterate over items with some prefix, output keys only') - p_iterate.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') - p_iterate.add_argument('key', nargs='*', help = 'Key parts') - p_iterate = subparsers.add_parser('iterate_values', help = 'Iterate over items with some prefix, output values only') - p_iterate.add_argument('prefix', help = 'Prefix (e.g. "s/k:emissions/")') - p_iterate.add_argument('key', nargs='*', help = 'Key parts') + add_key_cmd(subparsers, 'get', 'Retrieve a single item', False) + add_key_cmd(subparsers, 'history', 'Get all stored past values of the item', False) + add_key_cmd(subparsers, 'count', 'Count number of items with a prefix', True) + add_key_cmd(subparsers, 'iterate', 'Iterate over items with some prefix', True) + add_key_cmd(subparsers, 'iterate_keys', 'Iterate over items with some prefix, output keys only', True) + add_key_cmd(subparsers, 'iterate_values', 'Iterate over items with some prefix, output values only', True) return parser.parse_args() def run(args): dbpath = args.database if args.database is not None else 'data/application.db' - keyformat = args.keyformat if args.keyformat is not None else '' - valueformat = args.valueformat if args.valueformat is not None else 'b' + keyformat = args.keyformat if hasattr(args, 'keyformat') and args.keyformat is not None else '' + valueformat = args.valueformat if hasattr(args, 'valueformat') and args.valueformat is not None else 'b' if args.cmd == 'max_height' or args.cmd == 'min_height' or args.key is None or len(args.key) == 0: key = None @@ -147,11 +142,11 @@ def run(args): try: for k, v in it: if args.cmd == 'iterate_keys': - print(k) + print(' '.join([str(x) for x in k])) elif args.cmd == 'iterate_values': print(decode_output(valueformat,v)) else: - print((k, decode_output(valueformat, v))) + print(' '.join([str(x) for x in k]), decode_output(valueformat, v)) except BrokenPipeError: pass