From 48d0faf3743f8f98057b8465412366d274abafa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Sat, 10 Mar 2018 08:58:32 +0100 Subject: [PATCH] Renamed beacon_types and LT24, Spider and Spot parsers, fixes #37, #38, #40 --- ogn/parser/aprs_comment/flarm_parser.py | 2 +- ogn/parser/aprs_comment/lt24_parser.py | 14 +++++++++++++- ogn/parser/aprs_comment/naviter_parser.py | 2 +- ogn/parser/aprs_comment/ogn_parser.py | 10 +++++----- ogn/parser/aprs_comment/receiver_parser.py | 2 +- ogn/parser/aprs_comment/skylines_parser.py | 2 +- ogn/parser/aprs_comment/spider_parser.py | 14 +++++++++++++- ogn/parser/aprs_comment/spot_parser.py | 13 ++++++++++++- ogn/parser/aprs_comment/tracker_parser.py | 2 +- ogn/parser/pattern.py | 19 +++++++++++++++++++ tests/parser/test_parse.py | 20 ++++++++++---------- tests/parser/test_parse_lt24.py | 5 ++--- tests/parser/test_parse_spider.py | 17 +++++++++++++++++ tests/parser/test_parse_spot.py | 5 ++--- 14 files changed, 98 insertions(+), 29 deletions(-) create mode 100644 tests/parser/test_parse_spider.py diff --git a/ogn/parser/aprs_comment/flarm_parser.py b/ogn/parser/aprs_comment/flarm_parser.py index 55cdb27..7a4eec8 100644 --- a/ogn/parser/aprs_comment/flarm_parser.py +++ b/ogn/parser/aprs_comment/flarm_parser.py @@ -8,7 +8,7 @@ from .base import BaseParser class FlarmParser(BaseParser): def __init__(self): - self.beacon_type = 'aircraft_beacon' + self.beacon_type = 'flarm' @staticmethod def parse_position(aprs_comment): diff --git a/ogn/parser/aprs_comment/lt24_parser.py b/ogn/parser/aprs_comment/lt24_parser.py index 2414dd0..787391c 100644 --- a/ogn/parser/aprs_comment/lt24_parser.py +++ b/ogn/parser/aprs_comment/lt24_parser.py @@ -1,6 +1,18 @@ +import re + +from ogn.parser.utils import fpm2ms +from ogn.parser.pattern import PATTERN_LT24_BEACON + from .base import BaseParser class LT24Parser(BaseParser): def __init__(self): - self.beacon_type = 'lt24_beacon' + self.beacon_type = 'lt24' + + @staticmethod + def parse_position(aprs_comment): + ac_match = re.search(PATTERN_LT24_BEACON, aprs_comment) + return {'id': ac_match.group('id'), + 'climb_rate': int(ac_match.group('climb_rate')) * fpm2ms if ac_match.group('climb_rate') else None, + 'source': ac_match.group('source') if ac_match.group('source') else None} diff --git a/ogn/parser/aprs_comment/naviter_parser.py b/ogn/parser/aprs_comment/naviter_parser.py index a6f47ba..e3a95c1 100644 --- a/ogn/parser/aprs_comment/naviter_parser.py +++ b/ogn/parser/aprs_comment/naviter_parser.py @@ -8,7 +8,7 @@ from .base import BaseParser class NaviterParser(BaseParser): def __init__(self): - self.beacon_type = 'naviter_beacon' + self.beacon_type = 'naviter' @staticmethod def parse_position(aprs_comment): diff --git a/ogn/parser/aprs_comment/ogn_parser.py b/ogn/parser/aprs_comment/ogn_parser.py index 50efe97..620e310 100644 --- a/ogn/parser/aprs_comment/ogn_parser.py +++ b/ogn/parser/aprs_comment/ogn_parser.py @@ -8,24 +8,24 @@ from .base import BaseParser class OgnParser(BaseParser): def __init__(self): - self.beacon_type = 'depends...' + self.beacon_type = None def parse(self, aprs_comment, aprs_type): if not aprs_comment: - return {'beacon_type': 'receiver_beacon'} + return {'beacon_type': 'receiver'} ac_data = self.parse_aircraft_beacon(aprs_comment) if ac_data: - ac_data.update({'beacon_type': 'aircraft_beacon'}) + ac_data.update({'beacon_type': 'aircraft'}) return ac_data rc_data = self.parse_receiver_beacon(aprs_comment) if rc_data: - rc_data.update({'beacon_type': 'receiver_beacon'}) + rc_data.update({'beacon_type': 'receiver'}) return rc_data else: return {'user_comment': aprs_comment, - 'beacon_type': 'receiver_beacon'} + 'beacon_type': 'receiver'} @staticmethod def parse_aircraft_beacon(aprs_comment): diff --git a/ogn/parser/aprs_comment/receiver_parser.py b/ogn/parser/aprs_comment/receiver_parser.py index 73e7a67..e8272ca 100644 --- a/ogn/parser/aprs_comment/receiver_parser.py +++ b/ogn/parser/aprs_comment/receiver_parser.py @@ -7,7 +7,7 @@ from .base import BaseParser class ReceiverParser(BaseParser): def __init__(self): - self.beacon_type = 'receiver_beacon' + self.beacon_type = 'receiver' @staticmethod def parse_position(aprs_comment): diff --git a/ogn/parser/aprs_comment/skylines_parser.py b/ogn/parser/aprs_comment/skylines_parser.py index 2ccf24e..f89a01e 100644 --- a/ogn/parser/aprs_comment/skylines_parser.py +++ b/ogn/parser/aprs_comment/skylines_parser.py @@ -3,4 +3,4 @@ from .base import BaseParser class SkylinesParser(BaseParser): def __init__(self): - self.beacon_type = 'skylines_beacon' + self.beacon_type = 'skylines' diff --git a/ogn/parser/aprs_comment/spider_parser.py b/ogn/parser/aprs_comment/spider_parser.py index dcf481e..bcc431a 100644 --- a/ogn/parser/aprs_comment/spider_parser.py +++ b/ogn/parser/aprs_comment/spider_parser.py @@ -1,6 +1,18 @@ +import re + +from ogn.parser.pattern import PATTERN_SPIDER_BEACON + from .base import BaseParser class SpiderParser(BaseParser): def __init__(self): - self.beacon_type = 'spider_beacon' + self.beacon_type = 'spider' + + @staticmethod + def parse_position(aprs_comment): + ac_match = re.search(PATTERN_SPIDER_BEACON, aprs_comment) + return {'id': ac_match.group('id'), + 'signal_strength': int(ac_match.group('signal_strength')) if ac_match.group('signal_strength') else None, + 'spider_id': ac_match.group('spider_id') if ac_match.group('spider_id') else None, + 'gps_status': ac_match.group('gps_status') if ac_match.group('gps_status') else None} diff --git a/ogn/parser/aprs_comment/spot_parser.py b/ogn/parser/aprs_comment/spot_parser.py index 3275e90..684d6f2 100644 --- a/ogn/parser/aprs_comment/spot_parser.py +++ b/ogn/parser/aprs_comment/spot_parser.py @@ -1,6 +1,17 @@ +import re + +from ogn.parser.pattern import PATTERN_SPOT_BEACON + from .base import BaseParser class SpotParser(BaseParser): def __init__(self): - self.beacon_type = 'spot_beacon' + self.beacon_type = 'spot' + + @staticmethod + def parse_position(aprs_comment): + ac_match = re.search(PATTERN_SPOT_BEACON, aprs_comment) + return {'id': ac_match.group('id'), + 'model': int(ac_match.group('model')) if ac_match.group('model') else None, + 'status': ac_match.group('status') if ac_match.group('status') else None} diff --git a/ogn/parser/aprs_comment/tracker_parser.py b/ogn/parser/aprs_comment/tracker_parser.py index 2507d2f..6b751d1 100644 --- a/ogn/parser/aprs_comment/tracker_parser.py +++ b/ogn/parser/aprs_comment/tracker_parser.py @@ -8,7 +8,7 @@ from .base import BaseParser class TrackerParser(BaseParser): def __init__(self): - self.beacon_type = "aircraft_beacon" + self.beacon_type = 'tracker' @staticmethod def parse_position(aprs_comment): diff --git a/ogn/parser/pattern.py b/ogn/parser/pattern.py index 30a565a..0687bc5 100644 --- a/ogn/parser/pattern.py +++ b/ogn/parser/pattern.py @@ -4,12 +4,31 @@ import re PATTERN_APRS_POSITION = re.compile(r"^(?P.+?)>(?P[A-Z0-9]+),((?P[A-Za-z0-9]+)\*)?.*,(?P.+?):/(?P