ogn-python/app/model/device.py

62 wiersze
2.1 KiB
Python
Czysty Zwykły widok Historia

2019-03-30 16:50:29 +00:00
import datetime
2019-03-23 12:57:44 +00:00
from sqlalchemy.ext.hybrid import hybrid_property
2015-10-24 21:13:21 +00:00
2019-08-31 08:14:41 +00:00
from app import db
2019-03-23 12:57:44 +00:00
from .device_info import DeviceInfo
2015-10-24 21:13:21 +00:00
2019-03-23 19:46:27 +00:00
2019-02-10 12:10:19 +00:00
class Device(db.Model):
2019-08-31 08:14:41 +00:00
__tablename__ = "devices"
2015-10-24 21:13:21 +00:00
2019-02-10 12:25:24 +00:00
id = db.Column(db.Integer, primary_key=True)
2018-01-19 18:14:57 +00:00
2019-03-04 21:14:13 +00:00
name = db.Column(db.String, index=True)
2019-08-31 08:14:41 +00:00
# address = db.Column(db.String(6), index=True)
2019-02-10 12:25:24 +00:00
address = db.Column(db.String, index=True)
firstseen = db.Column(db.DateTime, index=True)
lastseen = db.Column(db.DateTime, index=True)
aircraft_type = db.Column(db.SmallInteger, index=True)
stealth = db.Column(db.Boolean)
software_version = db.Column(db.Float(precision=2))
hardware_version = db.Column(db.SmallInteger)
real_address = db.Column(db.String(6))
2015-10-24 21:13:21 +00:00
def __repr__(self):
2019-08-31 08:14:41 +00:00
return "<Device: %s,%s,%s,%s,%s,%s>" % (self.address, self.aircraft_type, self.stealth, self.software_version, self.hardware_version, self.real_address)
2019-03-23 12:57:44 +00:00
@hybrid_property
def info(self):
2019-08-31 08:14:41 +00:00
query = db.session.query(DeviceInfo).filter(DeviceInfo.address == self.address).order_by(DeviceInfo.address_origin)
2019-03-23 12:57:44 +00:00
return query.first()
2019-03-30 16:50:29 +00:00
def get_infos(self):
2019-08-31 08:14:41 +00:00
query = db.session.query(DeviceInfo).filter(DeviceInfo.address == self.address).order_by(DeviceInfo.address_origin)
return [info for info in query.all()]
2019-03-30 16:50:29 +00:00
EXPIRY_DATES = {
6.67: datetime.date(2020, 10, 31),
6.63: datetime.date(2020, 5, 31),
6.62: datetime.date(2020, 5, 31),
6.6: datetime.date(2020, 1, 31),
6.42: datetime.date(2019, 10, 31),
6.41: datetime.date(2019, 1, 31),
6.4: datetime.date(2019, 1, 31),
6.09: datetime.date(2018, 9, 30),
6.08: datetime.date(2018, 9, 30),
6.07: datetime.date(2018, 3, 31),
6.06: datetime.date(2017, 9, 30),
6.05: datetime.date(2017, 3, 31),
}
def expiry_date(self):
2019-08-31 08:14:41 +00:00
if self.name.startswith("FLR"):
2019-03-30 16:50:29 +00:00
if self.software_version in self.EXPIRY_DATES:
return self.EXPIRY_DATES[self.software_version]
else:
return datetime.date(2000, 1, 1)
else:
return None