add history subcommand
This commit is contained in:
23
iavlread
23
iavlread
@@ -34,25 +34,25 @@ def decode_output(format: str, data: bytes) -> str:
|
||||
elif format == 'u32':
|
||||
return struct.unpack('>I', data[:4])[0]
|
||||
elif format == 'u16':
|
||||
return struct.unpack('>H', data[:4])[0]
|
||||
return struct.unpack('>H', data[:2])[0]
|
||||
elif format == 'u8':
|
||||
return struct.unpack('>B', data[:4])[0]
|
||||
return struct.unpack('>B', data[:1])[0]
|
||||
elif format == 'i64':
|
||||
return struct.unpack('>q', data[:8])[0]
|
||||
elif format == 'i32':
|
||||
return struct.unpack('>i', data[:4])[0]
|
||||
elif format == 'i16':
|
||||
return struct.unpack('>h', data[:4])[0]
|
||||
return struct.unpack('>h', data[:2])[0]
|
||||
elif format == 'i8':
|
||||
return struct.unpack('>b', data[:4])[0]
|
||||
return struct.unpack('>b', data[:1])[0]
|
||||
elif format == 'i64ord':
|
||||
return struct.unpack('>Q', data[:8])[0] - (1<<63)
|
||||
elif format == 'i32ord':
|
||||
return struct.unpack('>I', data[:4])[0] - (1<<31)
|
||||
elif format == 'i16ord':
|
||||
return struct.unpack('>H', data[:4])[0] - (1<<15)
|
||||
return struct.unpack('>H', data[:2])[0] - (1<<15)
|
||||
elif format == 'i8ord':
|
||||
return struct.unpack('>B', data[:4])[0] - (1<<7)
|
||||
return struct.unpack('>B', data[:1])[0] - (1<<7)
|
||||
elif format.startswith('pbdict'):
|
||||
subformats = {'.' + id: subformat for x in format.split(',')[1:] for id, subformat in (x.split('='),)}
|
||||
return dict(decode_protobuf(subformats, '', data))
|
||||
@@ -78,6 +78,9 @@ def get_args():
|
||||
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')
|
||||
@@ -126,6 +129,14 @@ def run(args):
|
||||
|
||||
if result is not None:
|
||||
print(decode_output(valueformat, result))
|
||||
elif args.cmd == 'history':
|
||||
it = iavltree.history(db, args.prefix, keyformat, key, height)
|
||||
|
||||
try:
|
||||
for h, v in it:
|
||||
print(f'{h} {decode_output(valueformat, v)}')
|
||||
except BrokenPipeError:
|
||||
pass
|
||||
elif args.cmd == 'count':
|
||||
result = iavltree.count(db, args.prefix, height, keyformat, key = key)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user