add safesky parser comment details

pull/95/head
lemoidului 2021-05-01 17:51:31 +02:00
rodzic faa73997d7
commit 68f8b9b3a7
3 zmienionych plików z 13 dodań i 4 usunięć

Wyświetl plik

@ -12,9 +12,16 @@ class SafeskyParser(BaseParser):
def parse_position(self, aprs_comment):
match = self.position_pattern.match(aprs_comment)
result = dict()
if match.group('details'):
result.update({
'address_type': int(match.group('details'), 16) & 0b00000011,
'aircraft_type': (int(match.group('details'), 16) & 0b00111100) >> 2,
'no-tracking': (int(match.group('details'), 16) & 0b01000000) >> 6 == 1,
'stealth': (int(match.group('details'), 16) & 0b10000000) >> 7 == 1,
'address': match.group('address'),
})
result.update(
{'safesky_id': match.group('safesky_id'),
'climb_rate': int(match.group('climb_rate')) * FPM_TO_MS if match.group('climb_rate') else None})
{'climb_rate': int(match.group('climb_rate')) * FPM_TO_MS if match.group('climb_rate') else None})
if match.group('gps_quality'):
result.update({
'gps_quality': {

Wyświetl plik

@ -83,7 +83,7 @@ PATTERN_TRACKER_POSITION_COMMENT = re.compile(r"""
""", re.VERBOSE | re.MULTILINE)
PATTERN_SAFESKY_POSITION_COMMENT = re.compile(r"""
id(?P<safesky_id>[A-F0-9]{8})\s
id(?P<details>[\dA-F]{2})(?P<address>[\dA-F]{6}?)\s?
(?:(?P<climb_rate>[+-]\d+?)fpm\s)?
(?:gps(?P<gps_quality>(?P<gps_quality_horizontal>(\d+))x(?P<gps_quality_vertical>(\d+)))?)?
""", re.VERBOSE | re.MULTILINE)

Wyświetl plik

@ -8,7 +8,9 @@ class TestStringMethods(unittest.TestCase):
def test_position_comment(self):
# "SKY3E5906>OGNSKY,qAS,SafeSky:/072555h5103.47N/00524.81E'065/031/A=001250 !W05! id1C3E5906 +010fpm gps6x1"
message = SafeskyParser().parse_position("id1C3E5906 +010fpm gps6x1")
self.assertEqual(message['safesky_id'], '1C3E5906')
self.assertEqual(message['address'], '3E5906')
self.assertEqual(message['address_type'], 0)
self.assertEqual(message['aircraft_type'], 7)
self.assertAlmostEqual(message['climb_rate'], 10 * FPM_TO_MS, 2)
self.assertEqual(message['gps_quality'], {'horizontal': 6, 'vertical': 1})