Change <id> to <address>

pull/62/head
Konstantin Gründger 2018-04-28 13:44:01 +02:00
rodzic 572d8bbc54
commit c8d739eccd
7 zmienionych plików z 21 dodań i 12 usunięć

Wyświetl plik

@ -13,5 +13,8 @@ class FanetParser(BaseParser):
@staticmethod
def parse_position(aprs_comment):
ac_match = re.search(PATTERN_FANET_POSITION_COMMENT, aprs_comment)
return {'id': ac_match.group('id') if ac_match.group('id') else None,
return {'address_type': int(ac_match.group('details'), 16) & 0b00000011 if ac_match.group('details') else None,
'aircraft_type': (int(ac_match.group('details'), 16) & 0b01111100) >> 2 if ac_match.group('details') else None,
'stealth': (int(ac_match.group('details'), 16) & 0b10000000) >> 7 == 1 if ac_match.group('details') else None,
'address': ac_match.group('address') if ac_match.group('address') else None,
'climb_rate': int(ac_match.group('climb_rate')) * fpm2ms if ac_match.group('climb_rate') else None}

Wyświetl plik

@ -16,7 +16,7 @@ class FlarmParser(BaseParser):
return {'address_type': int(ac_match.group('details'), 16) & 0b00000011,
'aircraft_type': (int(ac_match.group('details'), 16) & 0b01111100) >> 2,
'stealth': (int(ac_match.group('details'), 16) & 0b10000000) >> 7 == 1,
'address': ac_match.group('id'),
'address': ac_match.group('address'),
'climb_rate': int(ac_match.group('climb_rate')) * fpm2ms,
'turn_rate': float(ac_match.group('turn_rate')),
'signal_quality': float(ac_match.group('signal_quality')),

Wyświetl plik

@ -18,6 +18,6 @@ class NaviterParser(BaseParser):
'aircraft_type': (int(match.group('details'), 16) & 0b0011110000000000) >> 10,
'address_type': (int(match.group('details'), 16) & 0b0000001111110000) >> 4,
'reserved': (int(match.group('details'), 16) & 0b0000000000001111),
'address': match.group('id'),
'address': match.group('address'),
'climb_rate': int(match.group('climb_rate')) * fpm2ms if match.group('climb_rate') else None,
'turn_rate': float(match.group('turn_rate')) if match.group('turn_rate') else None}

Wyświetl plik

@ -34,7 +34,7 @@ class OgnParser(BaseParser):
return {'address_type': int(ac_match.group('details'), 16) & 0b00000011,
'aircraft_type': (int(ac_match.group('details'), 16) & 0b01111100) >> 2,
'stealth': (int(ac_match.group('details'), 16) & 0b10000000) >> 7 == 1,
'address': ac_match.group('id'),
'address': ac_match.group('address'),
'climb_rate': int(ac_match.group('climb_rate')) * fpm2ms if ac_match.group('climb_rate') else None,
'turn_rate': float(ac_match.group('turn_rate')) if ac_match.group('turn_rate') else None,
'flightlevel': float(ac_match.group('flight_level')) if ac_match.group('flight_level') else None,

Wyświetl plik

@ -16,7 +16,7 @@ class TrackerParser(BaseParser):
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,
'address': match.group('id'),
'address': match.group('address'),
'climb_rate': int(match.group('climb_rate')) * fpm2ms if match.group('climb_rate') else None,
'turn_rate': float(match.group('turn_rate')) if match.group('turn_rate') else None,
'flightlevel': float(match.group('flight_level')) if match.group('flight_level') else None,

Wyświetl plik

@ -7,12 +7,12 @@ PATTERN_APRS_STATUS = re.compile(r"^(?P<time>(([0-1]\d|2[0-3])[0-5]\d[0-5]\dh|([
PATTERN_SERVER = re.compile(r"^# aprsc (?P<version>[a-z0-9\.\-]+) (?P<timestamp>\d+ [A-Za-z]+ \d+ \d{2}:\d{2}:\d{2} GMT) (?P<server>[A-Z0-9]+) (?P<ip_address>\d+\.\d+\.\d+\.\d+):(?P<port>\d+)$")
PATTERN_FANET_POSITION_COMMENT = re.compile("""
(?:id(?P<id>[\dA-F]+)\s)?
(id(?P<details>[\dA-F]{2})(?P<address>[\dA-F]{6}?)\s?)?
(?:(?P<climb_rate>[+-]\d+)fpm)?
""", re.VERBOSE | re.MULTILINE)
PATTERN_FLARM_POSITION_COMMENT = re.compile(r"""
id(?P<details>[\dA-F]{2})(?P<id>[\dA-F]{6}?)\s?
id(?P<details>[\dA-F]{2})(?P<address>[\dA-F]{6}?)\s?
(?:(?P<climb_rate>[+-]\d+?)fpm\s)?
(?:(?P<turn_rate>[+-][\d.]+?)rot\s)?
(?:(?P<signal_quality>[\d.]+?)dB\s)?
@ -32,7 +32,7 @@ PATTERN_LT24_POSITION_COMMENT = re.compile("""
""", re.VERBOSE | re.MULTILINE)
PATTERN_NAVITER_POSITION_COMMENT = re.compile("""
id(?P<details>[\dA-F]{4})(?P<id>[\dA-F]{6})\s
id(?P<details>[\dA-F]{4})(?P<address>[\dA-F]{6})\s
(?P<climb_rate>[+-]\d+)fpm\s
(?P<turn_rate>[+-][\d.]+)rot
""", re.VERBOSE | re.MULTILINE)
@ -56,7 +56,7 @@ PATTERN_SPOT_POSITION_COMMENT = re.compile("""
""", re.VERBOSE | re.MULTILINE)
PATTERN_TRACKER_POSITION_COMMENT = re.compile("""
id(?P<details>[\dA-F]{2})(?P<id>[\dA-F]{6}?)\s?
id(?P<details>[\dA-F]{2})(?P<address>[\dA-F]{6}?)\s?
(?:(?P<climb_rate>[+-]\d+?)fpm\s)?
(?:(?P<turn_rate>[+-][\d.]+?)rot\s)?
(?:FL(?P<flight_level>[\d.]+)\s)?
@ -158,7 +158,7 @@ PATTERN_RECEIVER_BEACON = re.compile(r"""
PATTERN_AIRCRAFT_BEACON = re.compile(r"""
id(?P<details>[\dA-F]{2})(?P<id>[\dA-F]{6}?)\s?
id(?P<details>[\dA-F]{2})(?P<address>[\dA-F]{6}?)\s?
(?:(?P<climb_rate>[+-]\d+?)fpm\s)?
(?:(?P<turn_rate>[+-][\d.]+?)rot\s)?
(?:FL(?P<flight_level>[\d.]+)\s)?

Wyświetl plik

@ -8,13 +8,19 @@ class TestStringMethods(unittest.TestCase):
def test_position_comment(self):
message = FanetParser.parse_position("id1E1103CE -02fpm")
self.assertEqual(message['id'], "1E1103CE")
self.assertEqual(message['address_type'], 2)
self.assertEqual(message['aircraft_type'], 7)
self.assertFalse(message['stealth'])
self.assertEqual(message['address'], "1103CE")
self.assertAlmostEqual(message['climb_rate'] * ms2fpm, -2, 0.1)
def test_pseudo_status_comment(self):
message = FanetParser.parse_position("")
self.assertIsNone(message['id'])
self.assertIsNone(message['address_type'])
self.assertIsNone(message['aircraft_type'])
self.assertIsNone(message['stealth'])
self.assertIsNone(message['address'])
self.assertIsNone(message['climb_rate'])