kopia lustrzana https://github.com/glidernet/ogn-python
Test OGNRANGE max_tile_mgrs.pl functionality
rodzic
eaab76bbf0
commit
2e84285ea0
|
@ -3,7 +3,7 @@ from datetime import datetime, timedelta
|
||||||
|
|
||||||
from sqlalchemy import func, case
|
from sqlalchemy import func, case
|
||||||
from sqlalchemy.sql.expression import label
|
from sqlalchemy.sql.expression import label
|
||||||
from ogn_python.model import Receiver
|
from ogn_python.model import Receiver, ReceiverCoverage
|
||||||
|
|
||||||
from ogn_python import db
|
from ogn_python import db
|
||||||
|
|
||||||
|
@ -19,20 +19,36 @@ def alchemyencoder(obj):
|
||||||
return float(obj)
|
return float(obj)
|
||||||
|
|
||||||
|
|
||||||
def stations2_filtered_pl():
|
def stations2_filtered_pl(start, end):
|
||||||
last_10_minutes = datetime.utcnow() - timedelta(minutes=10)
|
last_10_minutes = datetime.utcnow() - timedelta(minutes=10)
|
||||||
|
|
||||||
query = db.session.query(
|
query = db.session.query(
|
||||||
Receiver.name.label('s'),
|
Receiver.name.label('s'),
|
||||||
label('lt', func.round(func.ST_Y(Receiver.location_wkt) * 10000) / 10000),
|
label('lt', func.round(func.ST_Y(Receiver.location_wkt) * 10000) / 10000),
|
||||||
label('lg', func.round(func.ST_X(Receiver.location_wkt) * 10000) / 10000),
|
label('lg', func.round(func.ST_X(Receiver.location_wkt) * 10000) / 10000),
|
||||||
case([(Receiver.lastseen > last_10_minutes, "U")],
|
case([(Receiver.lastseen > last_10_minutes, "U")],
|
||||||
else_="D").label('u'),
|
else_="D").label('u'),
|
||||||
Receiver.lastseen.label('ut'),
|
Receiver.lastseen.label('ut'),
|
||||||
label('v', Receiver.version + '.' + Receiver.platform)) \
|
label('v', Receiver.version + '.' + Receiver.platform)) \
|
||||||
.order_by(Receiver.lastseen)
|
.order_by(Receiver.lastseen) \
|
||||||
|
.filter(db.or_(db.and_(start < Receiver.firstseen, end > Receiver.firstseen),
|
||||||
|
db.and_(start < Receiver.lastseen, end > Receiver.lastseen)))
|
||||||
|
|
||||||
res = db.session.execute(query)
|
res = db.session.execute(query)
|
||||||
stations = json.dumps({'stations': [dict(r) for r in res]}, default=alchemyencoder)
|
stations = json.dumps({'stations': [dict(r) for r in res]}, default=alchemyencoder)
|
||||||
|
|
||||||
return stations
|
return stations
|
||||||
|
|
||||||
|
|
||||||
|
def max_tile_mgrs_pl(station, start, end, squares):
|
||||||
|
query = db.session.query(
|
||||||
|
func.right(ReceiverCoverage.location_mgrs_short, 4),
|
||||||
|
func.count(ReceiverCoverage.location_mgrs_short)
|
||||||
|
) \
|
||||||
|
.filter(db.and_(Receiver.id == ReceiverCoverage.receiver_id, Receiver.name == station)) \
|
||||||
|
.filter(ReceiverCoverage.location_mgrs_short.like(squares + '%')) \
|
||||||
|
.group_by(func.right(ReceiverCoverage.location_mgrs_short, 4))
|
||||||
|
|
||||||
|
res = {'t': squares,
|
||||||
|
'p': ['{}/{}'.format(r[0], r[1]) for r in query.all()]}
|
||||||
|
return json.dumps(res)
|
|
@ -1,5 +1,5 @@
|
||||||
import json
|
import json
|
||||||
from datetime import datetime
|
from datetime import datetime, date
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
@ -8,10 +8,10 @@ from xmlunittest import XmlTestMixin
|
||||||
|
|
||||||
from tests.base import TestBaseDB, db
|
from tests.base import TestBaseDB, db
|
||||||
|
|
||||||
from ogn_python.model import AircraftBeacon, AircraftType, Receiver, Device, DeviceInfo
|
from ogn_python.model import AircraftBeacon, AircraftType, Receiver, Device, DeviceInfo, ReceiverCoverage
|
||||||
|
|
||||||
from ogn_python.backend.liveglidernet import rec, lxml
|
from ogn_python.backend.liveglidernet import rec, lxml
|
||||||
from ogn_python.backend.ognrange import stations2_filtered_pl
|
from ogn_python.backend.ognrange import stations2_filtered_pl, max_tile_mgrs_pl
|
||||||
|
|
||||||
|
|
||||||
class TestDB(TestBaseDB, XmlTestMixin):
|
class TestDB(TestBaseDB, XmlTestMixin):
|
||||||
|
@ -47,6 +47,15 @@ class TestDB(TestBaseDB, XmlTestMixin):
|
||||||
db.session.add(self.ab22)
|
db.session.add(self.ab22)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
self.rc11 = ReceiverCoverage(location_mgrs_short='32TPU8312', date=date(2017, 12, 20), max_signal_quality=10, max_altitude=1000, min_altitude=600, aircraft_beacon_count=20, device_count=2, receiver=self.r01)
|
||||||
|
self.rc12 = ReceiverCoverage(location_mgrs_short='32TPU8434', date=date(2017, 12, 20), max_signal_quality=10, max_altitude=1000, min_altitude=600, aircraft_beacon_count=20, device_count=2, receiver=self.r01)
|
||||||
|
self.rc12 = ReceiverCoverage(location_mgrs_short='32TPU8434', date=date(2017, 12, 21), max_signal_quality=10, max_altitude=1000, min_altitude=600, aircraft_beacon_count=20, device_count=2, receiver=self.r01)
|
||||||
|
self.rc21 = ReceiverCoverage(location_mgrs_short='32TPU8512', date=date(2017, 12, 20), max_signal_quality=10, max_altitude=1000, min_altitude=600, aircraft_beacon_count=20, device_count=2, receiver=self.r02)
|
||||||
|
db.session.add(self.rc11)
|
||||||
|
db.session.add(self.rc12)
|
||||||
|
db.session.add(self.rc21)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
@mock.patch('ogn_python.backend.liveglidernet.datetime')
|
@mock.patch('ogn_python.backend.liveglidernet.datetime')
|
||||||
def test_rec(self, datetime_mock):
|
def test_rec(self, datetime_mock):
|
||||||
datetime_mock.utcnow.return_value = datetime(2017, 12, 20, 10, 0)
|
datetime_mock.utcnow.return_value = datetime(2017, 12, 20, 10, 0)
|
||||||
|
@ -91,7 +100,7 @@ class TestDB(TestBaseDB, XmlTestMixin):
|
||||||
def test_stations2_filtered_pl(self, datetime_mock):
|
def test_stations2_filtered_pl(self, datetime_mock):
|
||||||
datetime_mock.utcnow.return_value = datetime(2017, 12, 20, 10, 0)
|
datetime_mock.utcnow.return_value = datetime(2017, 12, 20, 10, 0)
|
||||||
|
|
||||||
result = stations2_filtered_pl()
|
result = stations2_filtered_pl(start=date(2017, 12, 15), end=date(2017, 12, 25))
|
||||||
|
|
||||||
data = json.loads(result)
|
data = json.loads(result)
|
||||||
|
|
||||||
|
@ -119,6 +128,22 @@ class TestDB(TestBaseDB, XmlTestMixin):
|
||||||
|
|
||||||
self.assertEqual(s3["s"], 'Ohlstadt')
|
self.assertEqual(s3["s"], 'Ohlstadt')
|
||||||
|
|
||||||
|
def test_max_tile_mgrs_pl(self):
|
||||||
|
result = max_tile_mgrs_pl(station='Koenigsdf', start=date(2017, 12, 15), end=date(2017, 12, 25), squares='32TPU')
|
||||||
|
|
||||||
|
data = json.loads(result)
|
||||||
|
|
||||||
|
self.assertEqual(data['t'], '32TPU')
|
||||||
|
self.assertEqual(data['p'][0], '8312/1')
|
||||||
|
self.assertEqual(data['p'][1], '8434/2')
|
||||||
|
|
||||||
|
result = max_tile_mgrs_pl(station='Bene', start=date(2017, 12, 15), end=date(2017, 12, 25), squares='32TPU')
|
||||||
|
|
||||||
|
data = json.loads(result)
|
||||||
|
|
||||||
|
self.assertEqual(data['t'], '32TPU')
|
||||||
|
self.assertEqual(data['p'][0], '8512/1')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Ładowanie…
Reference in New Issue