From 3921b05d53c5416d80e9c67b229a0ae923c111d0 Mon Sep 17 00:00:00 2001
From: Bruce Flynn <brucef@ssec.wisc.edu>
Date: Wed, 23 Sep 2015 21:18:31 +0000
Subject: [PATCH] Add trunc code

---
 edosl0util/cli.py   | 22 +++++++++++++++++++++-
 edosl0util/trunc.py | 21 +++++++++++++++++++++
 2 files changed, 42 insertions(+), 1 deletion(-)
 create mode 100644 edosl0util/trunc.py

diff --git a/edosl0util/cli.py b/edosl0util/cli.py
index ff4b0bc..60051fb 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 0000000..38cdf80
--- /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)
-- 
GitLab