From a14da1d78ddc7891479e2a6e87908c3e6a675e11 Mon Sep 17 00:00:00 2001 From: Bill Mitchell Date: Wed, 7 Feb 2018 10:59:45 -0600 Subject: [PATCH 1/6] When packet type is unsupported, give error message which specifies the packet type. --- aprslib/parsing/__init__.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/aprslib/parsing/__init__.py b/aprslib/parsing/__init__.py index ec592a7..d40c7f6 100644 --- a/aprslib/parsing/__init__.py +++ b/aprslib/parsing/__init__.py @@ -139,6 +139,25 @@ def parse(packet): def _try_toparse_body(packet_type, body, parsed): result = {} + unsupported_formats = { + '#':'raw weather report', + '$':'raw gps', + '%':'agrelo', + '&':'reserved', + '(':'unused', + ')':'item report', + '*':'complete weather report', + '+':'reserved', + '-':'unused', + '.':'reserved', + '<':'station capabilities', + '?':'general query format', + 'T':'telemetry report', + '[':'maidenhead locator beacon', + '\\':'unused', + ']':'unused', + '^':'unused', + } # NOT SUPPORTED FORMATS # # # - raw weather report @@ -159,7 +178,7 @@ def _try_toparse_body(packet_type, body, parsed): # ] - unused # ^ - unused if packet_type in '#$%)* Date: Wed, 7 Feb 2018 12:52:01 -0600 Subject: [PATCH 2/6] If parsing fails on body after succeeding on head, return the partially-parsed packet as part of the error. --- aprslib/parsing/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aprslib/parsing/__init__.py b/aprslib/parsing/__init__.py index d40c7f6..12cac30 100644 --- a/aprslib/parsing/__init__.py +++ b/aprslib/parsing/__init__.py @@ -117,6 +117,7 @@ def parse(packet): # capture ParseErrors and attach the packet except (UnknownFormat, ParseError) as exp: exp.packet = packet + exp.parsed = parsed raise # if we fail all attempts to parse, try beacon packet From e79aafe29a993c4971b8fb86683bfc906491066c Mon Sep 17 00:00:00 2001 From: Bill Mitchell Date: Thu, 8 Feb 2018 14:53:49 -0600 Subject: [PATCH 3/6] Roll back previous commit --- aprslib/parsing/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/aprslib/parsing/__init__.py b/aprslib/parsing/__init__.py index 12cac30..d40c7f6 100644 --- a/aprslib/parsing/__init__.py +++ b/aprslib/parsing/__init__.py @@ -117,7 +117,6 @@ def parse(packet): # capture ParseErrors and attach the packet except (UnknownFormat, ParseError) as exp: exp.packet = packet - exp.parsed = parsed raise # if we fail all attempts to parse, try beacon packet From 3c82d6463e19671d8cabcb576e97a829ea69012b Mon Sep 17 00:00:00 2001 From: Bill Mitchell Date: Thu, 8 Feb 2018 14:55:05 -0600 Subject: [PATCH 4/6] Moved unsupported format list to larger scope, use the dictionary keys to test if a packet is in the unsupported list. --- aprslib/parsing/__init__.py | 59 +++++++++++++------------------------ 1 file changed, 20 insertions(+), 39 deletions(-) diff --git a/aprslib/parsing/__init__.py b/aprslib/parsing/__init__.py index d40c7f6..804a954 100644 --- a/aprslib/parsing/__init__.py +++ b/aprslib/parsing/__init__.py @@ -44,6 +44,25 @@ from aprslib.parsing.telemetry import * from aprslib.parsing.thirdparty import * from aprslib.parsing.weather import * +unsupported_formats = { + '#':'raw weather report', + '$':'raw gps', + '%':'agrelo', + '&':'reserved', + '(':'unused', + ')':'item report', + '*':'complete weather report', + '+':'reserved', + '-':'unused', + '.':'reserved', + '<':'station capabilities', + '?':'general query format', + 'T':'telemetry report', + '[':'maidenhead locator beacon', + '\\':'unused', + ']':'unused', + '^':'unused', +} def _unicode_packet(packet): # attempt utf-8 @@ -139,45 +158,7 @@ def parse(packet): def _try_toparse_body(packet_type, body, parsed): result = {} - unsupported_formats = { - '#':'raw weather report', - '$':'raw gps', - '%':'agrelo', - '&':'reserved', - '(':'unused', - ')':'item report', - '*':'complete weather report', - '+':'reserved', - '-':'unused', - '.':'reserved', - '<':'station capabilities', - '?':'general query format', - 'T':'telemetry report', - '[':'maidenhead locator beacon', - '\\':'unused', - ']':'unused', - '^':'unused', - } - # NOT SUPPORTED FORMATS - # - # # - raw weather report - # $ - raw gps - # % - agrelo - # & - reserved - # ( - unused - # ) - item report - # * - complete weather report - # + - reserved - # - - unused - # . - reserved - # < - station capabilities - # ? - general query format - # T - telemetry report - # [ - maidenhead locator beacon - # \ - unused - # ] - unused - # ^ - unused - if packet_type in '#$%)* Date: Sat, 27 Nov 2021 13:43:38 +0000 Subject: [PATCH 5/6] refine unsupported packet type message --- aprslib/parsing/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aprslib/parsing/__init__.py b/aprslib/parsing/__init__.py index 804a954..e8e37c4 100644 --- a/aprslib/parsing/__init__.py +++ b/aprslib/parsing/__init__.py @@ -159,7 +159,7 @@ def _try_toparse_body(packet_type, body, parsed): result = {} if packet_type in unsupported_formats: - raise UnknownFormat('format is not supported: {0}'.format(unsupported_formats[packet_type])) + raise UnknownFormat("Format is not supported: '{}' {}".format(packet_type, unsupported_formats[packet_type])) # 3rd party traffic elif packet_type == '}': From cf32c15a443c9e5cb44189f904fd6825dfe61538 Mon Sep 17 00:00:00 2001 From: Rossen Georgiev Date: Sat, 27 Nov 2021 13:44:38 +0000 Subject: [PATCH 6/6] fix test_unsupported_formats_raising; wasn't checking every type before --- tests/test_parse.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_parse.py b/tests/test_parse.py index 62ce882..258dd29 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -65,8 +65,8 @@ class ParseTestCase(unittest.TestCase): self.fail("empty status packet shouldn't raise exception") def test_unsupported_formats_raising(self): - with self.assertRaises(UnknownFormat): - for packet_type in '#$%)*,B:%saaa" % packet_type try: