kopia lustrzana https://github.com/glidernet/python-ogn-client
Allow negative altitudes
rodzic
1226e2679c
commit
8857a31e78
|
@ -28,7 +28,7 @@ def parse(aprs_message, reference_date=None, reference_time=None):
|
||||||
return message
|
return message
|
||||||
|
|
||||||
|
|
||||||
def parse_aprs(message, reference_date=None, reference_time=None):
|
def parse_aprs(message, reference_date, reference_time=None):
|
||||||
match_position = re.search(PATTERN_APRS_POSITION, message)
|
match_position = re.search(PATTERN_APRS_POSITION, message)
|
||||||
if match_position:
|
if match_position:
|
||||||
return {'name': match_position.group('callsign'),
|
return {'name': match_position.group('callsign'),
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
PATTERN_APRS_POSITION = re.compile(r"^(?P<callsign>.+?)>(?P<dstcall>[A-Z0-9]+),((?P<relay>[A-Za-z0-9]+)\*)?.*,(?P<receiver>.+?):/(?P<time>\d{6}(h|z))(?P<latitude>\d{4}\.\d{2})(?P<latitude_sign>N|S)(?P<symbol_table>.)(?P<longitude>\d{5}\.\d{2})(?P<longitude_sign>E|W)(?P<symbol>.)(?P<course_extension>(?P<course>\d{3})/(?P<ground_speed>\d{3}))?/A=(?P<altitude>\d{6})(?P<pos_extension>\s!W((?P<latitude_enhancement>\d)(?P<longitude_enhancement>\d))!)?(?:\s(?P<comment>.*))?$")
|
PATTERN_APRS_POSITION = re.compile(r"^(?P<callsign>.+?)>(?P<dstcall>[A-Z0-9]+),((?P<relay>[A-Za-z0-9]+)\*)?.*,(?P<receiver>.+?):/(?P<time>\d{6}(h|z))(?P<latitude>\d{4}\.\d{2})(?P<latitude_sign>N|S)(?P<symbol_table>.)(?P<longitude>\d{5}\.\d{2})(?P<longitude_sign>E|W)(?P<symbol>.)(?P<course_extension>(?P<course>\d{3})/(?P<ground_speed>\d{3}))?/A=(?P<altitude>[-\d]{6})(?P<pos_extension>\s!W((?P<latitude_enhancement>\d)(?P<longitude_enhancement>\d))!)?(?:\s(?P<comment>.*))?$")
|
||||||
PATTERN_APRS_STATUS = re.compile(r"^(?P<callsign>.+?)>(?P<dstcall>[A-Z0-9]+),.+,(?P<receiver>.+?):>(?P<time>\d{6}(h|z))\s(?P<comment>.*)$")
|
PATTERN_APRS_STATUS = re.compile(r"^(?P<callsign>.+?)>(?P<dstcall>[A-Z0-9]+),.+,(?P<receiver>.+?):>(?P<time>\d{6}(h|z))\s(?P<comment>.*)$")
|
||||||
|
|
||||||
PATTERN_NAVITER_BEACON = re.compile("""
|
PATTERN_NAVITER_BEACON = re.compile("""
|
||||||
|
|
|
@ -10,7 +10,7 @@ from ogn.parser.exceptions import AprsParseError
|
||||||
class TestStringMethods(unittest.TestCase):
|
class TestStringMethods(unittest.TestCase):
|
||||||
def test_fail_validation(self):
|
def test_fail_validation(self):
|
||||||
with self.assertRaises(AprsParseError):
|
with self.assertRaises(AprsParseError):
|
||||||
parse_aprs("notAValidString")
|
parse_aprs("notAValidString", reference_date=datetime(2015, 1, 1))
|
||||||
|
|
||||||
def test_basic(self):
|
def test_basic(self):
|
||||||
message = parse_aprs("FLRDDA5BA>APRS,qAS,LFMX:/160829h4415.41N/00600.03E'342/049/A=005524 this is a comment",
|
message = parse_aprs("FLRDDA5BA>APRS,qAS,LFMX:/160829h4415.41N/00600.03E'342/049/A=005524 this is a comment",
|
||||||
|
@ -71,6 +71,13 @@ class TestStringMethods(unittest.TestCase):
|
||||||
|
|
||||||
self.assertEqual(message['timestamp'].strftime('%d %H:%M'), "30 10:46")
|
self.assertEqual(message['timestamp'].strftime('%d %H:%M'), "30 10:46")
|
||||||
|
|
||||||
|
def test_negative_altitude(self):
|
||||||
|
# some devices can report negative altitudes
|
||||||
|
raw_message = "OGNF71F40>APRS,qAS,NAVITER:/080852h4414.37N/01532.06E'253/052/A=-00013 !W73! id1EF71F40 -060fpm +0.0rot"
|
||||||
|
message = parse_aprs(raw_message, reference_date=datetime(2015, 1, 1))
|
||||||
|
|
||||||
|
self.assertAlmostEqual(message['altitude'] * m2feet, -13, 5)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Ładowanie…
Reference in New Issue