kopia lustrzana https://github.com/glidernet/ogn-python
Test FL pattern
rodzic
73a574320d
commit
b5c3b1d8d7
|
@ -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)
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
Ładowanie…
Reference in New Issue