From fbbeeef08b49ba476c06d440a86f1a71f7481cfa Mon Sep 17 00:00:00 2001 From: XANTRONIX Industrial Date: Fri, 14 Feb 2025 15:32:15 -0500 Subject: [PATCH] Refactor radar.py to use database layer features --- bin/nexrad-archive-init | 2 +- lib/nexrad/radar.py | 41 ++++++++++++++++++++++------------------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/bin/nexrad-archive-init b/bin/nexrad-archive-init index 5cdd9ce..d08c63c 100755 --- a/bin/nexrad-archive-init +++ b/bin/nexrad-archive-init @@ -19,6 +19,6 @@ 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.add(radar) db.commit() diff --git a/lib/nexrad/radar.py b/lib/nexrad/radar.py index aa8e93c..dbc5077 100644 --- a/lib/nexrad/radar.py +++ b/lib/nexrad/radar.py @@ -42,12 +42,30 @@ RADAR_RANGE = 230000 class Radar(): __slots__ = ( - 'wban', 'call', 'name', 'coord', - 'site_elevation', 'tower_height', + 'call', 'wban', 'name', 'coord', 'site_elevation', 'tower_height', ) - wban: int + __table__ = 'nexrad_radar' + __key__ = 'call' + + __columns__ = ( + 'call', 'wban', 'name', 'coord', 'site_elevation', 'tower_height' + ) + + __columns_select__ = { + 'coord': 'ST_AsText(coord) as coord' + } + + __columns_write__ = { + 'coord': 'MakePoint(:coord_lon, :coord_lat, {crs})'.format(crs=COORD_SYSTEM) + } + + __values_write__ = { + 'coord': lambda v: {'coord_lon': v.lon, 'coord_lat': v.lat} + } + call: str + wban: int name: str coord: Coord site_elevation: float @@ -56,8 +74,8 @@ class Radar(): @staticmethod def from_tsv_row(row: list): radar = Radar() - radar.wban = int(row[0]) if row[0] != 'PENDING' else None radar.call = row[1] + radar.wban = int(row[0]) if row[0] != 'PENDING' else None radar.name = row[2] radar.coord = parse(row[3]) radar.site_elevation = 0.3048 * float(row[4]) @@ -75,18 +93,3 @@ class Radar(): row[i] = row[i].rstrip() yield Radar.from_tsv_row(row) - - def add_to_db(self, db): - sql = """ - insert into nexrad_radar ( - wban, call, name, site_elevation, tower_height, coord - ) values ( - ?, ?, ?, ?, ?, MakePoint(?, ?, %d) - ) - """ % (COORD_SYSTEM) - - db.execute(sql, ( - self.wban, self.call, self.name, - self.site_elevation, self.tower_height, - self.coord.lon, self.coord.lat - ))