From 202dc8fa0e5f9c2a784749b01759c52b142a4264 Mon Sep 17 00:00:00 2001 From: Rossen Georgiev Date: Thu, 17 Mar 2016 21:22:55 +0000 Subject: [PATCH] fix value error when parsing course & speed --- aprslib/parsing/common.py | 16 +++++++++------- tests/test_parse_common.py | 29 +++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/aprslib/parsing/common.py b/aprslib/parsing/common.py index adab645..6c0585d 100644 --- a/aprslib/parsing/common.py +++ b/aprslib/parsing/common.py @@ -134,21 +134,23 @@ def parse_comment(body, parsed): def parse_data_extentions(body): parsed = {} - match = re.findall(r"^([0-9 \.]{3})/([0-9 \.]{3})", body) + match = re.findall(r"^([0-9 .]{3})/([0-9 .]{3})", body) if match: cse, spd = match[0] body = body[7:] - parsed.update({ - 'course': int(cse) if cse.strip(' .') != '' else 0, - 'speed': int(spd)*1.852 if spd.strip(' .') != '' else 0, - }) + parsed.update({'course': int(cse) if cse.isdigit() and 1 <= int(cse) <= 360 else 0}) + if spd.isdigit(): + parsed.update({'speed': int(spd)*1.852}) - match = re.findall(r"^/([0-9]{3})/([0-9]{3})", body) + match = re.findall(r"^/([0-9 .]{3})/([0-9 .]{3})", body) if match: brg, nrq = match[0] body = body[8:] - parsed.update({'bearing': int(brg), 'nrq': int(nrq)}) + if brg.isdigit(): + parsed.update({'bearing': int(brg)}) + if nrq.isdigit(): + parsed.update({'nrq': int(nrq)}) else: match = re.findall(r"^(PHG(\d[\x30-\x7e]\d\d[0-9A-Z]?))", body) if match: diff --git a/tests/test_parse_common.py b/tests/test_parse_common.py index 3ac3552..d80b7c6 100644 --- a/tests/test_parse_common.py +++ b/tests/test_parse_common.py @@ -263,7 +263,6 @@ class DataExtentionsTC(unittest.TestCase): self.assertEqual(remaining, '/text') self.assertEqual(parsed, { 'course': 0, - 'speed': 0, }) body = ".../.../text" @@ -272,7 +271,33 @@ class DataExtentionsTC(unittest.TestCase): self.assertEqual(remaining, '/text') self.assertEqual(parsed, { 'course': 0, - 'speed': 0, + }) + + body = "22./33 /text" + remaining, parsed = parse_data_extentions(body) + + self.assertEqual(remaining, '/text') + self.assertEqual(parsed, { + 'course': 0, + }) + + def test_empty_bearing_nrq(self): + body = "111/100/ /...text" + remaining, parsed = parse_data_extentions(body) + + self.assertEqual(remaining, 'text') + self.assertEqual(parsed, { + 'course': 111, + 'speed': 100*1.852, + }) + + body = "111/100/2 /33.text" + remaining, parsed = parse_data_extentions(body) + + self.assertEqual(remaining, 'text') + self.assertEqual(parsed, { + 'course': 111, + 'speed': 100*1.852, }) def test_course_speed_bearing_nrq(self):