diff --git a/edosl0util/cli.py b/edosl0util/cli.py index ff4b0bcb0d0182e6b3265160b115b5095ebda497..60051fbb4ae5eb9d4336a0f88a3847366102614d 100644 --- a/edosl0util/cli.py +++ b/edosl0util/cli.py @@ -2,8 +2,28 @@ Console script entry points for CLI tools. """ import os +from datetime import datetime -from edosl0util import split +from edosl0util import split, trunc + + +def _timestamp(v): + return datetime.strptime(v, '%Y-%m-%d %H:%M:%S') + + +def cmd_trunc(): + from argparse import ArgumentParser + parser = ArgumentParser() + parser.add_argument('-o', '--output') + parser.add_argument('filename') + parser.add_argument('start', type=_timestamp) + parser.add_argument('end', type=_timestamp) + args = parser.parse_args() + + output = args.output or os.path.basename(args.filename) + '.trunc' + with open(output, 'wb') as fptr: + for pkt in trunc.trunc_file(args.filename, args.start, args.end): + fptr.write(pkt.blob) def cmd_split(): diff --git a/edosl0util/trunc.py b/edosl0util/trunc.py new file mode 100644 index 0000000000000000000000000000000000000000..38cdf80dbe89a8cd9c459495eaa04bf846fb0faa --- /dev/null +++ b/edosl0util/trunc.py @@ -0,0 +1,21 @@ + +from edosl0util.stream import PacketStream + + +def trunc_stream(stream, start, end): + stream.seek(start) + + pkt = stream.next() + while pkt.stamp <= end: + # first pkt in group + yield pkt + # following pkts in group + pkt = stream.next() + while pkt.stamp is None: + yield pkt + pkt = stream.next() + + +def trunc_file(filename, start, end): + stream = PacketStream(open(filename)) + return trunc_stream(stream, start, end)