From b5c3b1d8d79659c2f73cdfea1fa855c73cd9dea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Thu, 29 Oct 2015 08:34:20 +0100 Subject: [PATCH] Test FL pattern --- ogn/model/position.py | 12 ++++++++++++ tests/model/test_position.py | 14 +++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/ogn/model/position.py b/ogn/model/position.py index 704079b..c7fde93 100644 --- a/ogn/model/position.py +++ b/ogn/model/position.py @@ -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) diff --git a/tests/model/test_position.py b/tests/model/test_position.py index 57998a0..2e3430a 100644 --- a/tests/model/test_position.py +++ b/tests/model/test_position.py @@ -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")