Refactor radar.py to use database layer features
This commit is contained in:
parent
8a0cbfcd6b
commit
fbbeeef08b
2 changed files with 23 additions and 20 deletions
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
))
|
||||
|
|
Loading…
Add table
Reference in a new issue