kopia lustrzana https://github.com/glidernet/python-ogn-client
Added generic parser for unknown protocol
rodzic
dab3ca3ddb
commit
7a577ab9ef
|
@ -0,0 +1,12 @@
|
||||||
|
from .base import BaseParser
|
||||||
|
|
||||||
|
|
||||||
|
class GenericParser(BaseParser):
|
||||||
|
def __init__(self):
|
||||||
|
self.beacon_type = 'generic'
|
||||||
|
|
||||||
|
def parse_position(self, aprs_comment):
|
||||||
|
return {'comment': aprs_comment}
|
||||||
|
|
||||||
|
def parse_status(self, aprs_comment):
|
||||||
|
return {'comment': aprs_comment}
|
|
@ -3,7 +3,7 @@ from datetime import datetime
|
||||||
|
|
||||||
from ogn.parser.utils import createTimestamp, parseAngle, KNOTS_TO_MS, KPH_TO_MS, FEETS_TO_METER
|
from ogn.parser.utils import createTimestamp, parseAngle, KNOTS_TO_MS, KPH_TO_MS, FEETS_TO_METER
|
||||||
from ogn.parser.pattern import PATTERN_APRS, PATTERN_APRS_POSITION, PATTERN_APRS_STATUS, PATTERN_SERVER
|
from ogn.parser.pattern import PATTERN_APRS, PATTERN_APRS_POSITION, PATTERN_APRS_STATUS, PATTERN_SERVER
|
||||||
from ogn.parser.exceptions import AprsParseError, OgnParseError
|
from ogn.parser.exceptions import AprsParseError
|
||||||
|
|
||||||
from ogn.parser.aprs_comment.ogn_parser import OgnParser
|
from ogn.parser.aprs_comment.ogn_parser import OgnParser
|
||||||
from ogn.parser.aprs_comment.fanet_parser import FanetParser
|
from ogn.parser.aprs_comment.fanet_parser import FanetParser
|
||||||
|
@ -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.skylines_parser import SkylinesParser
|
||||||
from ogn.parser.aprs_comment.spider_parser import SpiderParser
|
from ogn.parser.aprs_comment.spider_parser import SpiderParser
|
||||||
from ogn.parser.aprs_comment.spot_parser import SpotParser
|
from ogn.parser.aprs_comment.spot_parser import SpotParser
|
||||||
|
from ogn.parser.aprs_comment.generic_parser import GenericParser
|
||||||
|
|
||||||
|
|
||||||
def parse(aprs_message, reference_timestamp=None):
|
def parse(aprs_message, reference_timestamp=None):
|
||||||
|
@ -105,6 +106,7 @@ dstcall_parser_mapping = {'APRS': OgnParser(),
|
||||||
'OGSKYL': SkylinesParser(),
|
'OGSKYL': SkylinesParser(),
|
||||||
'OGSPID': SpiderParser(),
|
'OGSPID': SpiderParser(),
|
||||||
'OGSPOT': SpotParser(),
|
'OGSPOT': SpotParser(),
|
||||||
|
'GENERIC': GenericParser(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,4 +115,4 @@ def parse_comment(aprs_comment, dstcall='APRS', aprs_type="position"):
|
||||||
if parser:
|
if parser:
|
||||||
return parser.parse(aprs_comment, aprs_type)
|
return parser.parse(aprs_comment, aprs_type)
|
||||||
else:
|
else:
|
||||||
raise OgnParseError("No parser for dstcall {} found. APRS comment: {}".format(dstcall, aprs_comment))
|
return dstcall_parser_mapping.get('GENERIC').parse(aprs_comment, aprs_type)
|
||||||
|
|
|
@ -6,7 +6,7 @@ from datetime import datetime
|
||||||
from time import sleep
|
from time import sleep
|
||||||
|
|
||||||
from ogn.parser.parse import parse
|
from ogn.parser.parse import parse
|
||||||
from ogn.parser.exceptions import AprsParseError, OgnParseError
|
from ogn.parser.exceptions import AprsParseError
|
||||||
|
|
||||||
|
|
||||||
class TestStringMethods(unittest.TestCase):
|
class TestStringMethods(unittest.TestCase):
|
||||||
|
@ -54,6 +54,10 @@ class TestStringMethods(unittest.TestCase):
|
||||||
def test_spot_beacons(self):
|
def test_spot_beacons(self):
|
||||||
self.parse_valid_beacon_data_file(filename='spot.txt', beacon_type='spot')
|
self.parse_valid_beacon_data_file(filename='spot.txt', beacon_type='spot')
|
||||||
|
|
||||||
|
def test_generic_beacons(self):
|
||||||
|
message = parse("EPZR>WTFDSTCALL,TCPIP*,qAC,GLIDERN1:>093456h this is a comment")
|
||||||
|
self.assertEqual(message['beacon_type'], 'generic')
|
||||||
|
|
||||||
def test_fail_parse_aprs_none(self):
|
def test_fail_parse_aprs_none(self):
|
||||||
with self.assertRaises(TypeError):
|
with self.assertRaises(TypeError):
|
||||||
parse(None)
|
parse(None)
|
||||||
|
@ -66,10 +70,6 @@ class TestStringMethods(unittest.TestCase):
|
||||||
with self.assertRaises(AprsParseError):
|
with self.assertRaises(AprsParseError):
|
||||||
parse("Lachens>APRS,TCPIwontbeavalidstring")
|
parse("Lachens>APRS,TCPIwontbeavalidstring")
|
||||||
|
|
||||||
def test_fail_bad_dstcall(self):
|
|
||||||
with self.assertRaises(OgnParseError):
|
|
||||||
parse("EPZR>WTFDSTCALL,TCPIP*,qAC,GLIDERN1:>093456h this is a comment")
|
|
||||||
|
|
||||||
def test_v026_chile(self):
|
def test_v026_chile(self):
|
||||||
# receiver beacons from chile have a APRS position message with a pure user comment
|
# receiver beacons from chile have a APRS position message with a pure user comment
|
||||||
message = parse("VITACURA1>APRS,TCPIP*,qAC,GLIDERN4:/201146h3322.79SI07034.80W&/A=002329 Vitacura Municipal Aerodrome, Club de Planeadores Vitacura")
|
message = parse("VITACURA1>APRS,TCPIP*,qAC,GLIDERN4:/201146h3322.79SI07034.80W&/A=002329 Vitacura Municipal Aerodrome, Club de Planeadores Vitacura")
|
||||||
|
|
Ładowanie…
Reference in New Issue