kopia lustrzana https://github.com/glidernet/python-ogn-client
Refactoring: pattern naming
rodzic
7ca937a17d
commit
52468a4bd1
|
@ -1,4 +1,6 @@
|
|||
# CHANGELOG
|
||||
## Unreleased
|
||||
- parser: Added support for OGNLT24 (LT24), OGSKYL (Skylines), OGSPID (Spider) and OGSPOT (Spot)
|
||||
|
||||
## 0.8.2: - 2018-01-20
|
||||
- parser: Better validation of timestamp, lat/lon and altitude
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import re
|
||||
|
||||
from ogn.parser.utils import fpm2ms
|
||||
from ogn.parser.pattern import PATTERN_LT24_BEACON
|
||||
from ogn.parser.pattern import PATTERN_LT24_POSITION_COMMENT
|
||||
|
||||
from .base import BaseParser
|
||||
|
||||
|
@ -12,7 +12,7 @@ class LT24Parser(BaseParser):
|
|||
|
||||
@staticmethod
|
||||
def parse_position(aprs_comment):
|
||||
ac_match = re.search(PATTERN_LT24_BEACON, aprs_comment)
|
||||
ac_match = re.search(PATTERN_LT24_POSITION_COMMENT, 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}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import re
|
||||
|
||||
from ogn.parser.pattern import PATTERN_NAVITER_BEACON
|
||||
from ogn.parser.pattern import PATTERN_NAVITER_POSITION_COMMENT
|
||||
from ogn.parser.utils import fpm2ms
|
||||
|
||||
from .base import BaseParser
|
||||
|
@ -12,7 +12,7 @@ class NaviterParser(BaseParser):
|
|||
|
||||
@staticmethod
|
||||
def parse_position(aprs_comment):
|
||||
match = re.search(PATTERN_NAVITER_BEACON, aprs_comment)
|
||||
match = re.search(PATTERN_NAVITER_POSITION_COMMENT, aprs_comment)
|
||||
return {'stealth': (int(match.group('details'), 16) & 0b1000000000000000) >> 15 == 1,
|
||||
'do_not_track': (int(match.group('details'), 16) & 0b0100000000000000) >> 14 == 1,
|
||||
'aircraft_type': (int(match.group('details'), 16) & 0b0011110000000000) >> 10,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import re
|
||||
|
||||
from ogn.parser.pattern import PATTERN_RECEIVER_POSITION, PATTERN_RECEIVER_STATUS
|
||||
from ogn.parser.pattern import PATTERN_RECEIVER_POSITION_COMMENT, PATTERN_RECEIVER_STATUS_COMMENT
|
||||
|
||||
from .base import BaseParser
|
||||
|
||||
|
@ -14,12 +14,12 @@ class ReceiverParser(BaseParser):
|
|||
if aprs_comment is None:
|
||||
return {}
|
||||
else:
|
||||
match = re.search(PATTERN_RECEIVER_POSITION, aprs_comment)
|
||||
match = re.search(PATTERN_RECEIVER_POSITION_COMMENT, aprs_comment)
|
||||
return {'user_comment': match.group('user_comment') if match.group('user_comment') else None}
|
||||
|
||||
@staticmethod
|
||||
def parse_status(aprs_comment):
|
||||
match = re.search(PATTERN_RECEIVER_STATUS, aprs_comment)
|
||||
match = re.search(PATTERN_RECEIVER_STATUS_COMMENT, aprs_comment)
|
||||
return {'version': match.group('version'),
|
||||
'platform': match.group('platform'),
|
||||
'cpu_load': float(match.group('cpu_load')),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import re
|
||||
|
||||
from ogn.parser.utils import fpm2ms
|
||||
from ogn.parser.pattern import PATTERN_SKYLINES_BEACON
|
||||
from ogn.parser.pattern import PATTERN_SKYLINES_POSITION_COMMENT
|
||||
|
||||
from .base import BaseParser
|
||||
|
||||
|
@ -12,6 +12,6 @@ class SkylinesParser(BaseParser):
|
|||
|
||||
@staticmethod
|
||||
def parse_position(aprs_comment):
|
||||
ac_match = re.search(PATTERN_SKYLINES_BEACON, aprs_comment)
|
||||
ac_match = re.search(PATTERN_SKYLINES_POSITION_COMMENT, 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}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import re
|
||||
|
||||
from ogn.parser.pattern import PATTERN_SPIDER_BEACON
|
||||
from ogn.parser.pattern import PATTERN_SPIDER_POSITION_COMMENT
|
||||
|
||||
from .base import BaseParser
|
||||
|
||||
|
@ -11,7 +11,7 @@ class SpiderParser(BaseParser):
|
|||
|
||||
@staticmethod
|
||||
def parse_position(aprs_comment):
|
||||
ac_match = re.search(PATTERN_SPIDER_BEACON, aprs_comment)
|
||||
ac_match = re.search(PATTERN_SPIDER_POSITION_COMMENT, 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,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import re
|
||||
|
||||
from ogn.parser.pattern import PATTERN_SPOT_BEACON
|
||||
from ogn.parser.pattern import PATTERN_SPOT_POSITION_COMMENT
|
||||
|
||||
from .base import BaseParser
|
||||
|
||||
|
@ -11,7 +11,7 @@ class SpotParser(BaseParser):
|
|||
|
||||
@staticmethod
|
||||
def parse_position(aprs_comment):
|
||||
ac_match = re.search(PATTERN_SPOT_BEACON, aprs_comment)
|
||||
ac_match = re.search(PATTERN_SPOT_POSITION_COMMENT, 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}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import re
|
||||
|
||||
from ogn.parser.pattern import PATTERN_TRACKER_BEACON_POSITION, PATTERN_TRACKER_BEACON_STATUS
|
||||
from ogn.parser.pattern import PATTERN_TRACKER_POSITION_COMMENT, PATTERN_TRACKER_STATUS_COMMENT
|
||||
from ogn.parser.utils import fpm2ms
|
||||
|
||||
from .base import BaseParser
|
||||
|
@ -12,7 +12,7 @@ class TrackerParser(BaseParser):
|
|||
|
||||
@staticmethod
|
||||
def parse_position(aprs_comment):
|
||||
match = re.search(PATTERN_TRACKER_BEACON_POSITION, aprs_comment)
|
||||
match = re.search(PATTERN_TRACKER_POSITION_COMMENT, aprs_comment)
|
||||
return {'address_type': int(match.group('details'), 16) & 0b00000011,
|
||||
'aircraft_type': (int(match.group('details'), 16) & 0b01111100) >> 2,
|
||||
'stealth': (int(match.group('details'), 16) & 0b10000000) >> 7 == 1,
|
||||
|
@ -29,7 +29,7 @@ class TrackerParser(BaseParser):
|
|||
|
||||
@staticmethod
|
||||
def parse_status(aprs_comment):
|
||||
match = re.search(PATTERN_TRACKER_BEACON_STATUS, aprs_comment)
|
||||
match = re.search(PATTERN_TRACKER_STATUS_COMMENT, aprs_comment)
|
||||
return {'hardware_version': int(match.group('hardware_version')) if match.group('hardware_version') else None,
|
||||
'software_version': int(match.group('software_version')) if match.group('software_version') else None,
|
||||
'gps_satellites': int(match.group('gps_satellites')) if match.group('gps_satellites') else None,
|
||||
|
|
|
@ -4,37 +4,37 @@ 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>(([0-1]\d|2[0-3])[0-5]\d[0-5]\dh|([0-2]\d|3[0-1])([0-1]\d|2[0-3])[0-5]\dz))(?P<latitude>9000\.00|[0-8]\d{3}\.\d{2})(?P<latitude_sign>N|S)(?P<symbol_table>.)(?P<longitude>18000\.00|1[0-7]\d{3}\.\d{2}|0\d{4}\.\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{5}|\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_LT24_BEACON = re.compile("""
|
||||
PATTERN_LT24_POSITION_COMMENT = re.compile("""
|
||||
id(?P<id>\d+)\s
|
||||
(?P<climb_rate>[+-]\d+)fpm\s
|
||||
(?P<source>.+)
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_NAVITER_BEACON = re.compile("""
|
||||
PATTERN_NAVITER_POSITION_COMMENT = re.compile("""
|
||||
id(?P<details>[\dA-F]{4})(?P<id>[\dA-F]{6})\s
|
||||
(?P<climb_rate>[+-]\d+)fpm\s
|
||||
(?P<turn_rate>[+-][\d.]+)rot
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_SKYLINES_BEACON = re.compile("""
|
||||
PATTERN_SKYLINES_POSITION_COMMENT = re.compile("""
|
||||
id(?P<id>\d+)\s
|
||||
(?P<climb_rate>[+-]\d+)fpm
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_SPIDER_BEACON = re.compile("""
|
||||
PATTERN_SPIDER_POSITION_COMMENT = re.compile("""
|
||||
id(?P<id>[\d-]+)\s
|
||||
(?P<signal_strength>[+-]\d+)dB\s
|
||||
(?P<spider_id>[A-Z]+)\s
|
||||
(?P<gps_status>.+)
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_SPOT_BEACON = re.compile("""
|
||||
PATTERN_SPOT_POSITION_COMMENT = re.compile("""
|
||||
id(?P<id>[\d-]+)\s
|
||||
SPOT(?P<model>\d)\s
|
||||
(?P<status>[A-Z]+)
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_TRACKER_BEACON_POSITION = re.compile("""
|
||||
PATTERN_TRACKER_POSITION_COMMENT = re.compile("""
|
||||
id(?P<details>[\dA-F]{2})(?P<id>[\dA-F]{6}?)\s?
|
||||
(?:(?P<climb_rate>[+-]\d+?)fpm\s)?
|
||||
(?:(?P<turn_rate>[+-][\d.]+?)rot\s)?
|
||||
|
@ -47,7 +47,7 @@ PATTERN_TRACKER_BEACON_POSITION = re.compile("""
|
|||
(?:h(?P<flarm_hardware_version>[\dA-F]{2})\s?)?
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_TRACKER_BEACON_STATUS = re.compile("""
|
||||
PATTERN_TRACKER_STATUS_COMMENT = re.compile("""
|
||||
h(?P<hardware_version>[\d]{2})\s
|
||||
v(?P<software_version>[\d]{2})\s
|
||||
(?P<gps_satellites>[\d]+)sat/(?P<gps_quality>\d)\s
|
||||
|
@ -60,11 +60,11 @@ PATTERN_TRACKER_BEACON_STATUS = re.compile("""
|
|||
(?P<relays>\d+)/min
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_RECEIVER_POSITION = re.compile(r"""
|
||||
PATTERN_RECEIVER_POSITION_COMMENT = re.compile(r"""
|
||||
(?:(?P<user_comment>.+))?
|
||||
""", re.VERBOSE | re.MULTILINE)
|
||||
|
||||
PATTERN_RECEIVER_STATUS = re.compile("""
|
||||
PATTERN_RECEIVER_STATUS_COMMENT = re.compile("""
|
||||
(?:
|
||||
v(?P<version>\d+\.\d+\.\d+)
|
||||
(?:\.(?P<platform>.+?))?
|
||||
|
|
Ładowanie…
Reference in New Issue