150 lines
4.8 KiB
Python
150 lines
4.8 KiB
Python
import logging
|
|
from trackdirect.common.Model import Model
|
|
|
|
|
|
class Station(Model):
|
|
"""Station represents the object/station that the packet is about
|
|
"""
|
|
|
|
def __init__(self, db):
|
|
"""The __init__ method.
|
|
|
|
Args:
|
|
db (psycopg2.Connection): Database connection
|
|
"""
|
|
Model.__init__(self, db)
|
|
self.logger = logging.getLogger('trackdirect')
|
|
|
|
self.id = None
|
|
self.name = None
|
|
self.latestSenderId = None
|
|
self.stationTypeId = 1 # default to 1
|
|
self.sourceId = None
|
|
|
|
self.latestPacketId = None
|
|
self.latestPacketTimestamp = None
|
|
|
|
self.latestLocationPacketId = None
|
|
self.latestLocationPacketTimestamp = None
|
|
|
|
self.latestWeatherPacketId = None
|
|
self.latestWeatherPacketTimestamp = None
|
|
|
|
self.latestTelemetryPacketId = None
|
|
self.latestTelemetryPacketTimestamp = None
|
|
|
|
# Latest packet with a location that is confirmed to be correct
|
|
self.latestConfirmedPacketId = None
|
|
self.latestConfirmedPacketTimestamp = None
|
|
self.latestConfirmedSymbol = None
|
|
self.latestConfirmedSymbolTable = None
|
|
self.latestConfirmedLatitude = None
|
|
self.latestConfirmedLongitude = None
|
|
self.latestConfirmedMarkerId = None
|
|
|
|
self.latestOgnPacketId = None
|
|
self.latestOgnPacketTimestamp = None
|
|
self.latestOgnSenderAddress = None
|
|
self.latestOgnAircraftTypeId = None
|
|
self.latestOgnAddressTypeId = None
|
|
|
|
def validate(self):
|
|
"""Returns true on success (when object content is valid), otherwise false
|
|
|
|
Returns:
|
|
True on success otherwise False
|
|
"""
|
|
if (self.name == ''):
|
|
return False
|
|
|
|
return True
|
|
|
|
def insert(self):
|
|
"""Method to call when we want to save a new object to database
|
|
|
|
Since packet will be inserted in batch we never use this method.
|
|
|
|
Returns:
|
|
True on success otherwise False
|
|
"""
|
|
if (not self.isExistingObject()):
|
|
insertCursor = self.db.cursor()
|
|
insertCursor.execute(
|
|
"""insert into station(name, station_type_id, source_id) values(%s, %s, %s) RETURNING id""", (
|
|
self.name.strip(), self.stationTypeId, self.sourceId)
|
|
)
|
|
self.id = insertCursor.fetchone()[0]
|
|
insertCursor.close()
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def update(self):
|
|
"""Method to call when we want to save changes to database
|
|
|
|
Returns:
|
|
True on success otherwise False
|
|
"""
|
|
if (self.isExistingObject()):
|
|
cursor = self.db.cursor()
|
|
cursor.execute(
|
|
"""update station set source_id = %s, name = %s, station_type_id = %s where id = %s and source_id is null""", (
|
|
self.sourceId, self.name, self.stationTypeId, self.id)
|
|
)
|
|
cursor.close()
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def getShortDict(self):
|
|
"""Returns a dict representation of the object
|
|
|
|
Returns:
|
|
Dict representation of the object
|
|
"""
|
|
data = {}
|
|
data['id'] = self.id
|
|
|
|
data['name'] = self.name
|
|
data['latest_sender_id'] = self.latestSenderId
|
|
data['station_type_id'] = self.stationTypeId
|
|
data['source_id'] = self.sourceId
|
|
|
|
if (self.latestConfirmedPacketId is not None):
|
|
data['latest_confirmed_packet_id'] = int(
|
|
self.latestConfirmedPacketId)
|
|
else:
|
|
data['latest_confirmed_packet_id'] = None
|
|
|
|
data['latest_confirmed_packet_timestamp'] = self.latestConfirmedPacketTimestamp
|
|
data['latest_confirmed_symbol'] = self.latestConfirmedSymbol
|
|
data['latest_confirmed_symbol_table'] = self.latestConfirmedSymbolTable
|
|
|
|
if (self.latestConfirmedLatitude is not None):
|
|
data['latest_confirmed_latitude'] = float(
|
|
self.latestConfirmedLatitude)
|
|
else:
|
|
data['latest_confirmed_latitude'] = None
|
|
|
|
if (self.latestConfirmedLongitude is not None):
|
|
data['latest_confirmed_longitude'] = float(
|
|
self.latestConfirmedLongitude)
|
|
else:
|
|
data['latest_confirmed_longitude'] = None
|
|
|
|
if (self.latestLocationPacketId is not None):
|
|
data['latest_location_packet_id'] = self.latestLocationPacketId
|
|
else:
|
|
data['latest_location_packet_id'] = None
|
|
|
|
data['latest_location_packet_timestamp'] = self.latestLocationPacketTimestamp
|
|
|
|
if (self.latestPacketId is not None):
|
|
data['latest_packet_id'] = int(self.latestPacketId)
|
|
else:
|
|
data['latest_packet_id'] = None
|
|
|
|
data['latest_packet_timestamp'] = self.latestPacketTimestamp
|
|
|
|
return data
|