From e613abdbcbeabfb0210505844e176d45d8650885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Sun, 1 Oct 2017 12:42:38 +0200 Subject: [PATCH 1/3] Fixed OGNTRK parser --- ogn/parser/parse_tracker.py | 14 ++++++++-- ogn/parser/pattern.py | 16 ++++++------ tests/parser/test_parse_tracker.py | 41 ++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 tests/parser/test_parse_tracker.py diff --git a/ogn/parser/parse_tracker.py b/ogn/parser/parse_tracker.py index 3ddf26b..680feea 100644 --- a/ogn/parser/parse_tracker.py +++ b/ogn/parser/parse_tracker.py @@ -23,5 +23,15 @@ def parse_position(aprs_comment): def parse_status(aprs_comment): match = re.search(PATTERN_TRACKER_BEACON_STATUS, aprs_comment) - return {'voltage': float(match.group('voltage')) if match.group('voltage') else None, - 'temperature': float(match.group('temperature')) if match.group('temperature') else None} + return {'hardware_version': int(match.group('hardware_version')) if match.group('hardware_version') else None, + 'software_version': int(match.group('software_version')) if match.group('software_version') else None, + 'gps_satellites': int(match.group('gps_satellites')) if match.group('gps_satellites') else None, + 'gps_quality': int(match.group('gps_quality')) if match.group('gps_quality') else None, + 'gps_altitude': int(match.group('gps_altitude')) if match.group('gps_altitude') else None, + 'pressure': float(match.group('pressure')) if match.group('pressure') else None, + 'temperature': float(match.group('temperature')) if match.group('temperature') else None, + 'humidity': int(match.group('humidity')) if match.group('humidity') else None, + 'voltage': float(match.group('voltage')) if match.group('voltage') else None, + 'transmitter_power': int(match.group('transmitter_power')) if match.group('transmitter_power') else None, + 'noise_level': float(match.group('noise_level')) if match.group('noise_level') else None, + 'relays': int(match.group('relays')) if match.group('relays') else None} diff --git a/ogn/parser/pattern.py b/ogn/parser/pattern.py index 936ac63..55554db 100644 --- a/ogn/parser/pattern.py +++ b/ogn/parser/pattern.py @@ -24,16 +24,16 @@ PATTERN_TRACKER_BEACON_POSITION = re.compile(""" """, re.VERBOSE | re.MULTILINE) PATTERN_TRACKER_BEACON_STATUS = re.compile(""" - h(?P[\d]{2})\s - v(?P[\d]{2})\s - (?P[\d]+)sat/(?P\d)\s - (?P\d+)m\s - (?P[\d.]+)hPa\s + h(?P[\d]{2})\s + v(?P[\d]{2})\s + (?P[\d]+)sat/(?P\d)\s + (?P\d+)m\s + (?P[\d.]+)hPa\s (?P[+-][\d.]+)degC\s - (?P\d+)%\s + (?P\d+)%\s (?P[\d.]+)V\s - (?P\d+)/(?P[+-][\d.]+)dBm\s - (?P\d+)/min + (?P\d+)/(?P[+-][\d.]+)dBm\s + (?P\d+)/min """, re.VERBOSE | re.MULTILINE) PATTERN_RECEIVER_POSITION = re.compile(r""" diff --git a/tests/parser/test_parse_tracker.py b/tests/parser/test_parse_tracker.py new file mode 100644 index 0000000..640372d --- /dev/null +++ b/tests/parser/test_parse_tracker.py @@ -0,0 +1,41 @@ +import unittest + +from ogn.parser.utils import ms2fpm +from ogn.parser.parse_tracker import parse_position, parse_status + + +class TestStringMethods(unittest.TestCase): + def test_position_beacon(self): + message = parse_position("id072FD00F -058fpm +1.1rot FL003.12 32.8dB 0e -0.8kHz gps3x5") + + self.assertEqual(message['address_type'], 3) + self.assertEqual(message['aircraft_type'], 1) + self.assertFalse(message['stealth']) + self.assertEqual(message['address'], "2FD00F") + self.assertAlmostEqual(message['climb_rate'] * ms2fpm, -58, 2) + self.assertEqual(message['turn_rate'], 1.1) + self.assertEqual(message['flightlevel'], 3.12) + self.assertEqual(message['signal_quality'], 32.8) + self.assertEqual(message['error_count'], 0) + self.assertEqual(message['frequency_offset'], -0.8) + self.assertEqual(message['gps_status'], '3x5') + + def test_status(self): + message = parse_status("h00 v00 9sat/1 164m 1002.6hPa +20.2degC 0% 3.34V 14/-110.5dBm 1/min") + + self.assertEqual(message['hardware_version'], 0) + self.assertEqual(message['software_version'], 0) + self.assertEqual(message['gps_satellites'], 9) + self.assertEqual(message['gps_quality'], 1) + self.assertEqual(message['gps_altitude'], 164) + self.assertEqual(message['pressure'], 1002.6) + self.assertEqual(message['temperature'], 20.2) + self.assertEqual(message['humidity'], 0) + self.assertEqual(message['voltage'], 3.34) + self.assertEqual(message['transmitter_power'], 14) + self.assertEqual(message['noise_level'], -110.5) + self.assertEqual(message['relays'], 1) + + +if __name__ == '__main__': + unittest.main() From 447af6933706cec4d5add5f369228110c1bbe45f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Sun, 1 Oct 2017 12:43:56 +0200 Subject: [PATCH 2/3] Fixed AprsClient test --- tests/client/test_AprsClient.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/client/test_AprsClient.py b/tests/client/test_AprsClient.py index fa6e88c..2760ea1 100644 --- a/tests/client/test_AprsClient.py +++ b/tests/client/test_AprsClient.py @@ -1,7 +1,7 @@ import unittest import unittest.mock as mock -from ogn.parser import parse_aprs, parse_ogn_beacon +from ogn.parser import parse from ogn.client.client import create_aprs_login, AprsClient from ogn.client.settings import APRS_APP_NAME, APRS_APP_VER @@ -72,8 +72,7 @@ class OgnClientTest(unittest.TestCase): def process_message(raw_message): if raw_message[0] == '#': return - message = parse_aprs(raw_message) - message.update(parse_ogn_beacon(message['comment'])) + parse(raw_message) if self.remaining_messages > 0: self.remaining_messages -= 1 else: From 44454c86767d1928aebadf8982f911edd4030a98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Sun, 1 Oct 2017 14:29:45 +0200 Subject: [PATCH 3/3] Make pytest work with nosetest --- tests/parser/test_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/parser/test_utils.py b/tests/parser/test_utils.py index c67eb5b..e9a8ba5 100644 --- a/tests/parser/test_utils.py +++ b/tests/parser/test_utils.py @@ -9,7 +9,7 @@ class TestStringMethods(unittest.TestCase): def test_parseAngle(self): self.assertAlmostEqual(parseAngle('05048.30'), 50.805, 5) - def proceed_test_data(self, test_data): + def proceed_test_data(self, test_data={}): for test in test_data: if test[3]: timestamp = createTimestamp(test[0], reference_date=test[1], reference_time=test[2])