From 656c6e29cc75c6b5491b6a46cb774f66fec92e34 Mon Sep 17 00:00:00 2001 From: XANTRONIX Industrial Date: Tue, 11 Feb 2025 21:42:22 -0500 Subject: [PATCH] Initial commit of bin/ utilities --- bin/nexrad-archive | 41 +++++++++++++++++++++++++++++++++++++++++ bin/nexrad-archive-init | 24 ++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100755 bin/nexrad-archive create mode 100755 bin/nexrad-archive-init diff --git a/bin/nexrad-archive b/bin/nexrad-archive new file mode 100755 index 0000000..402b265 --- /dev/null +++ b/bin/nexrad-archive @@ -0,0 +1,41 @@ +#! /usr/bin/env python3 + +import argparse + +from nexrad.db import Database +from nexrad.s3 import S3Bucket +from nexrad.storm import StormReport +from nexrad.archive import Archive + +parser = argparse.ArgumentParser( + description = 'Archive NEXRAD Level II data from Amazon S3' +) + +parser.add_argument('--quiet', action='store_true', help='Suppress output') +parser.add_argument('--dry-run', action='store_true', help='Do not actually archive data') +parser.add_argument('db', help='SQLite3 NEXRAD radar site database') +parser.add_argument('csv-report-details', help='Compressed storm report details CSV file') +parser.add_argument('archive-dir', help='Target archive directory') + +args = parser.parse_args() + +db = Database.connect(args.db) +bucket = S3Bucket() +archive = Archive(getattr(args, 'archive-dir'), bucket) + +for report in StormReport.each_from_csv_file(getattr(args, 'csv-report-details')): + if not report.is_radar_significant(): + continue + + radars = report.nearby_radars(db) + + for key in bucket.each_matching_key(radars, report.timestamp_start, report.timestamp_end): + if archive.is_archived(key): + if not args.quiet: + print(f"Key {key} already archived") + else: + if not args.quiet: + print(f"Archiving {key}") + + if not args.dry_run: + archive.archive(key) diff --git a/bin/nexrad-archive-init b/bin/nexrad-archive-init new file mode 100755 index 0000000..5cdd9ce --- /dev/null +++ b/bin/nexrad-archive-init @@ -0,0 +1,24 @@ +#! /usr/bin/env python3 + +import argparse + +from nexrad.db import Database +from nexrad.radar import Radar + +parser = argparse.ArgumentParser( + description = 'Initialize NEXRAD radar site database' +) + +parser.add_argument('db', help='Path to SQLite3 database') +parser.add_argument('radars-tsv', help='Path to NEXRAD radar station TSV file') + +args = parser.parse_args() + +db = Database.connect(args.db) + +db.execute('begin transaction') + +for radar in Radar.each_from_tsv(getattr(args, 'radars-tsv')): + radar.add_to_db(db) + +db.commit()