Add Inreach parser

Based on documentation here...
https://github.com/glidernet/ogn-aprs-protocol/blob/master/aprsmsgs.txt
pull/65/head
Philip Lee 2019-06-05 20:11:59 -07:00
rodzic 37de8673c2
commit 55e3696a34
4 zmienionych plików z 47 dodań i 0 usunięć

Wyświetl plik

@ -0,0 +1,18 @@
import re
from ogn.parser.pattern import PATTERN_INREACH_POSITION_COMMENT
from .base import BaseParser
class InreachParser(BaseParser):
def __init__(self):
self.beacon_type = 'inreach'
self.position_pattern = re.compile(PATTERN_INREACH_POSITION_COMMENT)
def parse_position(self, aprs_comment):
ac_match = self.position_pattern.match(aprs_comment)
return {'address': ac_match.group('id'),
'model': ac_match.group('model') if ac_match.group('model') else None,
'status': ac_match.group('status') if ac_match.group('status') else None,
'pilot_name': ac_match.group('pilot_name') if ac_match.group('pilot_name') else None}

Wyświetl plik

@ -15,6 +15,7 @@ from ogn.parser.aprs_comment.receiver_parser import ReceiverParser
from ogn.parser.aprs_comment.skylines_parser import SkylinesParser
from ogn.parser.aprs_comment.spider_parser import SpiderParser
from ogn.parser.aprs_comment.spot_parser import SpotParser
from ogn.parser.aprs_comment.inreach_parser import InreachParser
from ogn.parser.aprs_comment.generic_parser import GenericParser
@ -106,6 +107,7 @@ dstcall_parser_mapping = {'APRS': OgnParser(),
'OGSKYL': SkylinesParser(),
'OGSPID': SpiderParser(),
'OGSPOT': SpotParser(),
'OGINREACH': InreachParser(),
'GENERIC': GenericParser(),
}

Wyświetl plik

@ -55,6 +55,13 @@ PATTERN_SPOT_POSITION_COMMENT = re.compile("""
(?P<status>[A-Z]+)
""", re.VERBOSE | re.MULTILINE)
PATTERN_INREACH_POSITION_COMMENT = re.compile("""
id(?P<id>[\d]+)\s
(?P<model>inReac[A-Za-z\d]*)\s
(?P<status>[A-Za-z]+)\s?
(?P<pilot_name>.+)?
""", re.VERBOSE | re.MULTILINE)
PATTERN_TRACKER_POSITION_COMMENT = re.compile("""
id(?P<details>[\dA-F]{2})(?P<address>[\dA-F]{6}?)\s?
(?:(?P<climb_rate>[+-]\d+?)fpm\s)?

Wyświetl plik

@ -0,0 +1,20 @@
import unittest
from ogn.parser.aprs_comment.inreach_parser import InreachParser
class TestStringMethods(unittest.TestCase):
def test_position_comment(self):
message = InreachParser().parse_position("id300434060496190 inReac True")
self.assertEqual(message['address'], "300434060496190")
self.assertEqual(message['model'], 'inReac')
self.assertEqual(message['status'], "True")
self.assertEqual(message['pilot_name'], None)
message = InreachParser().parse_position("id300434060496190 inReac True Jim Bob")
self.assertEqual(message['address'], "300434060496190")
self.assertEqual(message['model'], 'inReac')
self.assertEqual(message['status'], "True")
self.assertEqual(message['pilot_name'], "Jim Bob")
if __name__ == '__main__':
unittest.main()