Bugfixed createTimestamp

pull/23/head
Konstantin Gründger 2015-12-10 07:43:18 +01:00
rodzic e62203638e
commit 60745fb6f3
3 zmienionych plików z 9 dodań i 13 usunięć

Wyświetl plik

@ -18,20 +18,16 @@ def dmsToDeg(dms):
return d + m
def createTimestamp(hhmmss, reference):
def createTimestamp(hhmmss, reference=datetime.utcnow(), validate=False):
hh = int(hhmmss[0:2])
mm = int(hhmmss[2:4])
ss = int(hhmmss[4:6])
if reference is None:
reference = datetime.utcnow()
return datetime(reference.year, reference.month, reference.day, hh, mm, ss)
if (reference.hour == 23) & (hh == 0):
reference = reference + timedelta(days=1)
elif (reference.hour == 0) & (hh == 23):
reference = reference - timedelta(days=1)
elif abs(reference.hour - hh) > 1:
elif validate and abs(reference.hour - hh) > 1:
raise Exception("Time difference is too big. Reference time:%s - timestamp:%s" % (reference, hhmmss))
return datetime(reference.year, reference.month, reference.day, hh, mm, ss)

Wyświetl plik

@ -29,7 +29,7 @@ class Beacon(AbstractConcreteBase, Base):
altitude = Column(Integer)
comment = None
def parse(self, text, reference_time=None):
def parse(self, text):
result = re_pattern_aprs.match(text)
if result is None:
raise AprsParseError(text)
@ -37,7 +37,7 @@ class Beacon(AbstractConcreteBase, Base):
self.name = result.group(1)
self.receiver_name = result.group(2)
self.timestamp = createTimestamp(result.group(3), reference_time)
self.timestamp = createTimestamp(result.group(3))
self.latitude = dmsToDeg(float(result.group(4)) / 100)
if result.group(5) == "S":

Wyświetl plik

@ -10,16 +10,16 @@ class TestStringMethods(unittest.TestCase):
self.assertAlmostEqual(dmsToDeg(dms), 50.805, 5)
def test_createTimestamp_seconds_behind(self):
timestamp = createTimestamp('235959', datetime(2015, 10, 16, 0, 0, 1))
self.assertEqual(timestamp, datetime(2015, 10, 15, 23, 59, 59))
timestamp = createTimestamp('235959', reference=datetime(2015, 10, 16, 0, 0, 1))
self.assertEqual(timestamp, datetime(2015, 10, 15, 23, 59, 59))
def test_createTimestamp_seconds_before(self):
timestamp = createTimestamp('000001', datetime(2015, 10, 15, 23, 59, 59))
self.assertEqual(timestamp, datetime(2015, 10, 16, 0, 0, 1))
timestamp = createTimestamp('000001', reference=datetime(2015, 10, 15, 23, 59, 59))
self.assertEqual(timestamp, datetime(2015, 10, 16, 0, 0, 1))
def test_createTimestamp_big_difference(self):
with self.assertRaises(Exception):
createTimestamp(datetime(2015, 10, 15, 23, 59, 59), '123456')
createTimestamp('123456', reference=datetime(2015, 10, 15, 23, 59, 59), validate=True)
def test_create_aprs_login(self):
basic_login = create_aprs_login('klaus', -1, 'myApp', '0.1')