Refactor radar.py to use database layer features

This commit is contained in:
XANTRONIX Industrial 2025-02-14 15:32:15 -05:00
parent 8a0cbfcd6b
commit fbbeeef08b
2 changed files with 23 additions and 20 deletions

View file

@ -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()

View file

@ -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
))