From 60745fb6f3ce1d499bac23f97b9a80889d2a04ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Thu, 10 Dec 2015 07:43:18 +0100 Subject: [PATCH] Bugfixed createTimestamp --- ogn/aprs_utils.py | 8 ++------ ogn/model/beacon.py | 4 ++-- tests/test_aprs_utils.py | 10 +++++----- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/ogn/aprs_utils.py b/ogn/aprs_utils.py index 0fbdd25..90b319e 100644 --- a/ogn/aprs_utils.py +++ b/ogn/aprs_utils.py @@ -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) diff --git a/ogn/model/beacon.py b/ogn/model/beacon.py index aea967d..09bac52 100644 --- a/ogn/model/beacon.py +++ b/ogn/model/beacon.py @@ -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": diff --git a/tests/test_aprs_utils.py b/tests/test_aprs_utils.py index 351d976..e20c2f0 100644 --- a/tests/test_aprs_utils.py +++ b/tests/test_aprs_utils.py @@ -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')