def parse(self, text, reference_time=None): result = prog.match(text) if result is None: raise Exception("String is not valid" % text) self.name = result.group(1) self.receiver_name = result.group(2) self.timestamp = createTimestamp(result.group(3), reference_time) self.latitude = dmsToDeg(float(result.group(4)) / 100) if result.group(5) == "S": self.latitude = -self.latitude self.symboltable = result.group(6) self.longitude = dmsToDeg(float(result.group(7)) / 100) if result.group(8) == "W": self.longitude = -self.longitude self.symbolcode = result.group(9) if result.group(10) is not None: self.track = int(result.group(11)) self.ground_speed = int(result.group(12))*kts2kmh else: self.track = 0 self.ground_speed = 0 self.altitude = int(result.group(13))*feet2m self.comment = result.group(14)
def test_basic(self): beacon = Beacon() beacon.parse("FLRDDA5BA>APRS,qAS,LFMX:/160829h4415.41N/00600.03E'342/049/A=005524 this is a comment") self.assertEqual(beacon.name, "FLRDDA5BA") self.assertEqual(beacon.receiver_name, "LFMX") self.assertEqual(beacon.timestamp.strftime("%H:%M:%S"), "16:08:29") self.assertAlmostEqual(beacon.latitude, dmsToDeg(44.1541), 5) self.assertEqual(beacon.symboltable, "/") self.assertAlmostEqual(beacon.longitude, dmsToDeg(6.0003), 5) self.assertEqual(beacon.symbolcode, "'") self.assertEqual(beacon.track, 342) self.assertEqual(beacon.ground_speed, 49 * kts2kmh) self.assertAlmostEqual(beacon.altitude * m2feet, 5524, 5) self.assertEqual(beacon.comment, "this is a comment")
def test_dmsToDeg(self): dms = 50.4830 self.assertAlmostEqual(dmsToDeg(dms), 50.805, 5)