pull/56/head
Konstantin Gründger 2016-07-04 22:54:37 +02:00
rodzic acd606aa2e
commit d857f88512
2 zmienionych plików z 63 dodań i 55 usunięć

Wyświetl plik

@ -107,23 +107,24 @@ def compute_logbook_entries(session=None):
upd = update(Logbook) \
.where(and_(Logbook.device_id == complete_flights.c.device_id,
or_(and_(Logbook.takeoff_airport_id == complete_flights.c.takeoff_airport_id,
Logbook.takeoff_timestamp == complete_flights.c.takeoff_timestamp),
Logbook.takeoff_airport_id == null()),
or_(and_(Logbook.landing_airport_id == complete_flights.c.landing_airport_id,
Logbook.landing_timestamp == complete_flights.c.landing_timestamp),
Logbook.landing_airport_id == null()))) \
Logbook.takeoff_timestamp == complete_flights.c.takeoff_timestamp,
Logbook.landing_airport_id == null()),
and_(Logbook.takeoff_airport_id == null(),
Logbook.landing_airport_id == complete_flights.c.landing_airport_id,
Logbook.landing_timestamp == complete_flights.c.landing_timestamp)))) \
.values({"takeoff_timestamp": complete_flights.c.takeoff_timestamp,
"takeoff_track": complete_flights.c.takeoff_track,
"takeoff_airport_id": complete_flights.c.takeoff_airport_id,
"landing_timestamp": complete_flights.c.landing_timestamp,
"landing_track": complete_flights.c.landing_track,
"landing_airport_id": complete_flights.c.landing_airport_id,
"duration": complete_flights.c.duration})
"duration": complete_flights.c.duration,
"max_altitude": 1})
result = session.execute(upd)
counter = result.rowcount
update_counter = result.rowcount
session.commit()
logger.debug("Updated logbook entries: {}".format(counter))
logger.debug("Updated logbook entries: {}".format(update_counter))
# unite all computated flights ('incomplete' and 'complete')
union_query = complete_flight_query.union(
@ -136,12 +137,13 @@ def compute_logbook_entries(session=None):
# consider only if not already stored
new_logbook_entries = session.query(union_query) \
.filter(~exists().where(
and_(Logbook.reftime == union_query.c.reftime,
Logbook.device_id == union_query.c.device_id,
or_(Logbook.takeoff_airport_id == union_query.c.takeoff_airport_id,
and_(Logbook.device_id == union_query.c.device_id,
or_(and_(Logbook.takeoff_airport_id == union_query.c.takeoff_airport_id,
Logbook.takeoff_timestamp == union_query.c.takeoff_timestamp),
and_(Logbook.takeoff_airport_id == null(),
union_query.c.takeoff_airport_id == null())),
or_(Logbook.landing_airport_id == union_query.c.landing_airport_id,
or_(and_(Logbook.landing_airport_id == union_query.c.landing_airport_id,
Logbook.landing_timestamp == union_query.c.landing_timestamp),
and_(Logbook.landing_airport_id == null(),
union_query.c.landing_airport_id == null())))))
@ -158,8 +160,8 @@ def compute_logbook_entries(session=None):
new_logbook_entries)
result = session.execute(ins)
counter = result.rowcount
insert_counter = result.rowcount
session.commit()
logger.debug("New logbook entries: {}".format(counter))
logger.debug("New logbook entries: {}".format(insert_counter))
return counter
return "{}/{}".format(update_counter, insert_counter)

Wyświetl plik

@ -11,6 +11,11 @@ class TestDB(unittest.TestCase):
engine = None
app = None
TAKEOFF_KOENIGSDF_DD0815 = "INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'"
LANDING_KOENIGSDF_DD0815 = "INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:05:00', FALSE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'"
LANDING_KOENIGSDF_DD0815_LATER = "INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-02 10:05:00', FALSE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'"
TAKEOFF_OHLSTADT_DD4711 = "INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Ohlstadt' and d.address = 'DD4711'"
def setUp(self):
os.environ['OGN_CONFIG_MODULE'] = 'config.test'
from ogn.commands.dbutils import engine, session
@ -32,88 +37,89 @@ class TestDB(unittest.TestCase):
session.commit()
pass
def count_logbook_entries(self):
session = self.session
logbook_query = session.query(Logbook)
i = 0
for logbook in logbook_query.all():
i = i + 1
print("{} {} {} {} {} {}".format(logbook.id, logbook.device_id, logbook.takeoff_airport_id, logbook.takeoff_timestamp, logbook.landing_airport_id, logbook.landing_timestamp))
return i
def test_single_takeoff(self):
session = self.session
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
session.commit()
compute_logbook_entries(session)
self.assertEqual(self.count_logbook_entries(), 1)
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/1')
def test_single_landing(self):
session = self.session
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', FALSE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute(self.LANDING_KOENIGSDF_DD0815)
session.commit()
compute_logbook_entries(session)
self.assertEqual(self.count_logbook_entries(), 1)
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/1')
def test_different_takeoffs(self):
session = self.session
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Ohlstadt' and d.address = 'DD4711'")
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
session.execute(self.TAKEOFF_OHLSTADT_DD4711)
session.commit()
compute_logbook_entries(session)
self.assertEqual(self.count_logbook_entries(), 2)
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/2')
def test_takeoff_and_landing(self):
session = self.session
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:05:00', FALSE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
session.execute(self.LANDING_KOENIGSDF_DD0815)
session.commit()
compute_logbook_entries(session)
self.assertEqual(self.count_logbook_entries(), 1)
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/1')
def test_takeoff_and_landing_on_different_days(self):
session = self.session
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-02 10:05:00', FALSE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
session.execute(self.LANDING_KOENIGSDF_DD0815_LATER)
session.commit()
compute_logbook_entries(session)
self.assertEqual(self.count_logbook_entries(), 2)
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/2')
def test_update(self):
session = self.session
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
session.commit()
compute_logbook_entries(session)
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:05:00', FALSE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/1')
session.execute(self.LANDING_KOENIGSDF_DD0815)
session.commit()
compute_logbook_entries(session)
self.assertEqual(self.count_logbook_entries(), 1)
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '1/0')
session.execute(self.TAKEOFF_OHLSTADT_DD4711)
session.commit()
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/1')
@unittest.skip("Doesnt work... dont know why. Fix it!")
def test_update_wrong_order(self):
session = self.session
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:05:00', FALSE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.execute(self.LANDING_KOENIGSDF_DD0815)
session.commit()
compute_logbook_entries(session)
session.execute("INSERT INTO takeoff_landing(device_id, airport_id, timestamp, is_takeoff) SELECT d.id, a.id, '2016-06-01 10:00:00', TRUE FROM airport a, device d WHERE a.name='Koenigsdorf' and d.address = 'DD0815'")
session.commit()
compute_logbook_entries(session)
self.assertEqual(self.count_logbook_entries(), 1)
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '0/1')
session.execute(self.TAKEOFF_KOENIGSDF_DD0815)
session.commit()
entries_changed = compute_logbook_entries(session)
self.assertEqual(entries_changed, '1/0')
if __name__ == '__main__':
unittest.main()