Skip to content
Snippets Groups Projects
Commit 3dee531e authored by Bruce Flynn's avatar Bruce Flynn
Browse files

Separate modules for cli tools so they can be run using python -m

parent a13c95bd
No related branches found
No related tags found
No related merge requests found
import io
import logging
from edosl0util.cli import util
from edosl0util import stream
LOG = logging
def main():
parser = util.default_parser()
parser.add_argument('-a', '--aqua', action='store_true')
parser.add_argument('filepath')
args = parser.parse_args()
util.configure_logging(args)
num_packets = 0
if not args.aqua:
packets = stream.jpss_packet_stream(io.open(args.filepath, 'rb'))
else:
packets = stream.aqua_packet_stream(io.open(args.filepath, 'rb'))
while True:
try:
packets.next()
num_packets += 1
except stream.PacketTooShort as err:
LOG.warn("corrupt packet stream after %d packets: %s",
num_packets, err)
break
except StopIteration:
break
total = 0
first, last, info = packets.info()
LOG.info("First: %s", first)
LOG.info("Last: %s", last)
for apid, dat in info.items():
total += dat['count']
LOG.info("%d: count=%d missing=%d", apid, dat['count'], dat['num_missing'])
LOG.info("{} total packets".format(total))
if __name__ == '__main__':
main()
import io
from datetime import datetime
from edosl0util.cli import util
from edosl0util import merge, stream
def main():
parser = util.default_parser()
parser.add_argument('-o', '--output', default='out.pds')
def interval(v):
dt = lambda v: datetime.strptime(v, '%Y-%m-%d %H:%M:%S')
return [dt(x) for x in v.split(',')]
parser.add_argument(
'-t', '--trunc-to', type=interval,
help=('Truncate to the interval given as coma separated timestamps of '
'the format YYYY-MM-DD HH:MM:SS. The begin time is inclusive, the '
'end time is exclusive.'))
parser.add_argument('pds', nargs='+')
args = parser.parse_args()
util.configure_logging(args)
streams = [stream.jpss_packet_stream(io.open(f, 'rb')) for f in args.pds]
merge.merge(
streams, output=io.open(args.output, 'wb'), trunc_to=args.trunc_to)
if __name__ == '__main__':
main()
# encoding: utf-8
""" """
Console script entry points for CLI tools. Create a NASA Level0 PDS file from a set of NOAA IDPS RDR files. The output
PDS file will have packets sorted by time and apid. Any packets marked in
the RDR PacketTracker as containing fill are removed.
""" """
__copyright__ = "Copyright (C) 2015 University of Wisconsin SSEC. All rights reserved." __copyright__ = "Copyright (C) 2015 University of Wisconsin SSEC. All rights reserved."
import io
import os import os
import glob import glob
import logging import logging
from datetime import datetime, timedelta from datetime import datetime, timedelta
from edosl0util import split, trunc, stream, merge, jpssrdr from edosl0util import stream, merge, jpssrdr
from edosl0util.cli import util
LOG = logging LOG = logging
def _timestamp(v): def main():
return datetime.strptime(v, '%Y-%m-%d %H:%M:%S')
def _default_parser():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', action='store_true')
return parser
def _configure_logging(args):
level = logging.DEBUG if getattr(args, 'verbose', False) else logging.WARN
logging.basicConfig(level=level, format='%(message)s')
def cmd_trunc():
parser = _default_parser()
parser.add_argument('-o', '--output')
parser.add_argument('filename')
parser.add_argument('start', type=_timestamp, help='YYYY-MM-DD HH:MM:SS')
parser.add_argument('end', type=_timestamp, help='YYYY-MM-DD HH:MM:SS')
args = parser.parse_args()
_configure_logging(args)
output = args.output or os.path.basename(args.filename) + '.trunc'
with io.open(output, 'wb') as fptr:
for pkt in trunc.trunc_file(args.filename, args.start, args.end):
fptr.write(pkt.bytes())
def cmd_split():
parser = _default_parser()
parser.add_argument('--minutes', type=int, default=6)
parser.add_argument('filepath')
args = parser.parse_args()
_configure_logging(args)
for stamp, fpath in split.split_file(args.filepath, args.minutes, os.getcwd()):
LOG.info('wrote bucket {} to {}'.format(stamp.isoformat(), fpath))
def cmd_info():
parser = _default_parser()
parser.add_argument('-a', '--aqua', action='store_true')
parser.add_argument('filepath')
args = parser.parse_args()
_configure_logging(args)
num_packets = 0
if not args.aqua:
packets = stream.jpss_packet_stream(io.open(args.filepath, 'rb'))
else:
packets = stream.aqua_packet_stream(io.open(args.filepath, 'rb'))
while True:
try:
packets.next()
num_packets += 1
except stream.PacketTooShort as err:
LOG.warn("corrupt packet stream after %d packets: %s",
num_packets, err)
break
except StopIteration:
break
total = 0
first, last, info = packets.info()
LOG.info("First: %s", first)
LOG.info("Last: %s", last)
for apid, dat in info.items():
total += dat['count']
LOG.info("%d: count=%d missing=%d", apid, dat['count'], dat['num_missing'])
LOG.info("{} total packets".format(total))
def cmd_merge():
parser = _default_parser()
parser.add_argument('-o', '--output', default='out.pds')
def interval(v):
dt = lambda v: datetime.strptime(v, '%Y-%m-%d %H:%M:%S')
return [dt(x) for x in v.split(',')]
parser.add_argument(
'-t', '--trunc-to', type=interval,
help=('Truncate to the interval given as coma separated timestamps of '
'the format YYYY-MM-DD HH:MM:SS. The begin time is inclusive, the '
'end time is exclusive.'))
parser.add_argument('pds', nargs='+')
args = parser.parse_args()
_configure_logging(args)
streams = [stream.jpss_packet_stream(io.open(f, 'rb')) for f in args.pds]
merge.merge(
streams, output=io.open(args.output, 'wb'), trunc_to=args.trunc_to)
def cmd_rdr2l0():
"""
Create a NASA Level0 PDS file from a set of NOAA IDPS RDR files. The output
PDS file will have packets sorted by time and apid. Any packets marked in
the RDR PacketTracker as containing fill are removed.
"""
# XXX: This currently uses standard CCSDS packet merging that does not have # XXX: This currently uses standard CCSDS packet merging that does not have
# any context regarding fill packets. In the future if it is desired to # any context regarding fill packets. In the future if it is desired to
# keep fill packets a new RDR specific merge will be required. # keep fill packets a new RDR specific merge will be required.
parser = _default_parser() parser = util.default_parser()
parser.description = cmd_rdr2l0.__doc__ parser.description = __doc__
parser.add_argument( parser.add_argument(
'--minutes', type=int, default=120, '--minutes', type=int, default=120,
help=('Output size in minutes. The resulting file will be truncated ' help=('Output size in minutes. The resulting file will be truncated '
...@@ -143,7 +44,7 @@ def cmd_rdr2l0(): ...@@ -143,7 +44,7 @@ def cmd_rdr2l0():
help=('Time to use for creation time (yyyy-mm-dd hh:mm:ss).')) help=('Time to use for creation time (yyyy-mm-dd hh:mm:ss).'))
parser.add_argument('rdr', nargs='+') parser.add_argument('rdr', nargs='+')
args = parser.parse_args() args = parser.parse_args()
_configure_logging(args) util.configure_logging(args)
def pdsfilename(product): def pdsfilename(product):
return 'P157{}{:%y%j%H%M%S}001.PDX'.format(product, args.created) return 'P157{}{:%y%j%H%M%S}001.PDX'.format(product, args.created)
...@@ -192,3 +93,7 @@ def cmd_rdr2l0(): ...@@ -192,3 +93,7 @@ def cmd_rdr2l0():
streams = [stream.jpss_packet_stream(open(f, 'rb')) for f in inputs] streams = [stream.jpss_packet_stream(open(f, 'rb')) for f in inputs]
merge.merge(streams, output=open(pdsname, 'wb'), trunc_to=interval) merge.merge(streams, output=open(pdsname, 'wb'), trunc_to=interval)
remove_files(inputs) remove_files(inputs)
if __name__ == '__main__':
main()
import os
import logging
from edosl0util.cli import util
from edosl0util import split
LOG = logging
def main():
parser = util.default_parser()
parser.add_argument('--minutes', type=int, default=6)
parser.add_argument('filepath')
args = parser.parse_args()
util.configure_logging(args)
for stamp, fpath in split.split_file(args.filepath, args.minutes, os.getcwd()):
LOG.info('wrote bucket {} to {}'.format(stamp.isoformat(), fpath))
if __name__ == '__main__':
main()
import os
import io
from edosl0util.cli import util
from edosl0util import trunc
def main():
parser = util.default_parser()
parser.add_argument('-o', '--output')
parser.add_argument('filename')
parser.add_argument('start', type=util.timestamp, help='YYYY-MM-DD HH:MM:SS')
parser.add_argument('end', type=util.timestamp, help='YYYY-MM-DD HH:MM:SS')
args = parser.parse_args()
util.configure_logging(args)
output = args.output or os.path.basename(args.filename) + '.trunc'
with io.open(output, 'wb') as fptr:
for pkt in trunc.trunc_file(args.filename, args.start, args.end):
fptr.write(pkt.bytes())
if __name__ == '__main__':
main()
import logging
import argparse
from datetime import datetime
def timestamp(v):
return datetime.strptime(v, '%Y-%m-%d %H:%M:%S')
def default_parser():
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', action='store_true')
return parser
def configure_logging(args):
level = logging.DEBUG if getattr(args, 'verbose', False) else logging.WARN
logging.basicConfig(level=level, format='%(message)s')
...@@ -13,10 +13,10 @@ setup( ...@@ -13,10 +13,10 @@ setup(
], ],
entry_points=""" entry_points="""
[console_scripts] [console_scripts]
edosl0split = edosl0util.cli:cmd_split edosl0split = edosl0util.cli.split:main
edosl0trunc = edosl0util.cli:cmd_trunc edosl0trunc = edosl0util.cli.trunc:main
edosl0info = edosl0util.cli:cmd_info edosl0info = edosl0util.cli.info:main
edosl0merge = edosl0util.cli:cmd_merge edosl0merge = edosl0util.cli.merge:main
rdr2l0 = edosl0util.cli:cmd_rdr2l0 rdr2l0 = edosl0util.cli.rdr2l0:main
""" """
) )
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment