Test FL pattern

pull/1/head
Konstantin Gründger 2015-10-29 08:34:20 +01:00
rodzic 73a574320d
commit b5c3b1d8d7
2 zmienionych plików z 21 dodań i 5 usunięć

Wyświetl plik

@ -25,6 +25,8 @@ class Position(Beacon):
hardware_version = Column(SmallInteger)
real_id = Column(String(6))
flightlevel = Column(Float)
# Pattern
address_pattern = re.compile(r"id(\S{2})(\S{6})")
climb_rate_pattern = re.compile(r"([\+\-]\d+)fpm")
@ -40,6 +42,8 @@ class Position(Beacon):
hardware_version_pattern = re.compile(r"h(\d+)")
real_id_pattern = re.compile(r"r(\w{6})")
flightlevel_pattern = re.compile(r"FL(\d{3}\.\d{2})")
def __init__(self, beacon=None):
self.heared_aircraft_IDs = list()
@ -55,6 +59,9 @@ class Position(Beacon):
self.comment = beacon.comment
self.parse(beacon.comment)
else:
self.latitude = 0.0
self.longitude = 0.0
def parse(self, text):
for part in text.split(' '):
@ -72,6 +79,8 @@ class Position(Beacon):
hardware_version_match = self.hardware_version_pattern.match(part)
real_id_match = self.real_id_pattern.match(part)
flightlevel_match = self.flightlevel_pattern.match(part)
if address_match is not None:
# Flarm ID type byte in APRS msg: PTTT TTII
# P => stealth mode
@ -109,6 +118,9 @@ class Position(Beacon):
self.hardware_version = int(hardware_version_match.group(1))
elif real_id_match is not None:
self.real_id = real_id_match.group(1)
elif flightlevel_match is not None:
self.flightlevel = float(flightlevel_match.group(1))
else:
raise Exception("No valid position description: %s" % part)

Wyświetl plik

@ -8,8 +8,8 @@ from ogn.model.position import Position
class TestStringMethods(unittest.TestCase):
def test_basic(self):
position = Position()
position.parse("id0ADDA5BA -454fpm -1.1rot 8.8dB 0e +51.2kHz gps4x5 hear1084 hearB597 hearB598")
self.assertFalse(position.stealth)
self.assertEqual(position.address, "DDA5BA")
self.assertAlmostEqual(position.climb_rate*ms2fpm, -454, 2)
@ -32,18 +32,22 @@ class TestStringMethods(unittest.TestCase):
position.parse("id8ADD1234")
self.assertTrue(position.stealth)
def test_ver024(self):
def test_v024(self):
position = Position()
position.latitude = 0.0
position.longitude = 0.0
position.parse("!W26! id21400EA9 -2454fpm +0.9rot 19.5dB 0e -6.6kHz gps1x1 s6.02 h44 rDF0C56")
self.assertEqual(position.latitude, 0.002)
self.assertEqual(position.longitude, 0.006)
self.assertEqual(position.software_version, 6.02)
self.assertEqual(position.hardware_version, 44)
self.assertEqual(position.real_id, "DF0C56")
def test_ogn_tracker(self):
position = Position()
position.parse("!W34! id07353800 +020fpm -14.0rot FL004.43 38.5dB 0e -2.9kHz")
self.assertEqual(position.flightlevel, 4.43)
def test_copy_constructor(self):
beacon = Beacon()
beacon.parse("FLRDDA5BA>APRS,qAS,LFMX:/160829h4415.41N/00600.03E'342/049/A=005524 id0ADDA5BA -454fpm -1.1rot 8.8dB 0e +51.2kHz gps4x5")