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."
import io
import os
import glob
import logging
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
def _timestamp(v):
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.
"""
def main():
# 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
# keep fill packets a new RDR specific merge will be required.
parser = _default_parser()
parser.description = cmd_rdr2l0.__doc__
parser = util.default_parser()
parser.description = __doc__
parser.add_argument(
'--minutes', type=int, default=120,
help=('Output size in minutes. The resulting file will be truncated '
......@@ -143,7 +44,7 @@ def cmd_rdr2l0():
help=('Time to use for creation time (yyyy-mm-dd hh:mm:ss).'))
parser.add_argument('rdr', nargs='+')
args = parser.parse_args()
_configure_logging(args)
util.configure_logging(args)
def pdsfilename(product):
return 'P157{}{:%y%j%H%M%S}001.PDX'.format(product, args.created)
......@@ -192,3 +93,7 @@ def cmd_rdr2l0():
streams = [stream.jpss_packet_stream(open(f, 'rb')) for f in inputs]
merge.merge(streams, output=open(pdsname, 'wb'), trunc_to=interval)
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(
],
entry_points="""
[console_scripts]
edosl0split = edosl0util.cli:cmd_split
edosl0trunc = edosl0util.cli:cmd_trunc
edosl0info = edosl0util.cli:cmd_info
edosl0merge = edosl0util.cli:cmd_merge
rdr2l0 = edosl0util.cli:cmd_rdr2l0
edosl0split = edosl0util.cli.split:main
edosl0trunc = edosl0util.cli.trunc:main
edosl0info = edosl0util.cli.info:main
edosl0merge = edosl0util.cli.merge:main
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