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')
|
db.execute('begin transaction')
|
||||||
|
|
||||||
for radar in Radar.each_from_tsv(getattr(args, 'radars-tsv')):
|
for radar in Radar.each_from_tsv(getattr(args, 'radars-tsv')):
|
||||||
radar.add_to_db(db)
|
db.add(radar)
|
||||||
|
|
||||||
db.commit()
|
db.commit()
|
||||||
|
|
|
@ -42,12 +42,30 @@ RADAR_RANGE = 230000
|
||||||
|
|
||||||
class Radar():
|
class Radar():
|
||||||
__slots__ = (
|
__slots__ = (
|
||||||
'wban', 'call', 'name', 'coord',
|
'call', 'wban', 'name', 'coord', 'site_elevation', 'tower_height',
|
||||||
'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
|
call: str
|
||||||
|
wban: int
|
||||||
name: str
|
name: str
|
||||||
coord: Coord
|
coord: Coord
|
||||||
site_elevation: float
|
site_elevation: float
|
||||||
|
@ -56,8 +74,8 @@ class Radar():
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def from_tsv_row(row: list):
|
def from_tsv_row(row: list):
|
||||||
radar = Radar()
|
radar = Radar()
|
||||||
radar.wban = int(row[0]) if row[0] != 'PENDING' else None
|
|
||||||
radar.call = row[1]
|
radar.call = row[1]
|
||||||
|
radar.wban = int(row[0]) if row[0] != 'PENDING' else None
|
||||||
radar.name = row[2]
|
radar.name = row[2]
|
||||||
radar.coord = parse(row[3])
|
radar.coord = parse(row[3])
|
||||||
radar.site_elevation = 0.3048 * float(row[4])
|
radar.site_elevation = 0.3048 * float(row[4])
|
||||||
|
@ -75,18 +93,3 @@ class Radar():
|
||||||
row[i] = row[i].rstrip()
|
row[i] = row[i].rstrip()
|
||||||
|
|
||||||
yield Radar.from_tsv_row(row)
|
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