From c0d478f14c6c15022b1d40e63a720792f9abc31a Mon Sep 17 00:00:00 2001 From: Peter van 't Zand Date: Wed, 15 Jul 2015 13:19:47 +0200 Subject: created timedelta to seconds function because python2.6-datetime doesn't support .total_seconds() --- src/croniter/croniter.py | 11 ++++++++++- src/croniter/tests/test_croniter.py | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py index 311f0c7..758df18 100644 --- a/src/croniter/croniter.py +++ b/src/croniter/croniter.py @@ -155,7 +155,7 @@ class croniter(object): if d.tzinfo is not None: d = d.replace(tzinfo=None) - d.utcoffset() - return (d - datetime.datetime(1970, 1, 1)).total_seconds() + return self._timedelta_to_seconds(d - datetime.datetime(1970, 1, 1)) def _timestamp_to_datetime(self, timestamp): """ @@ -167,6 +167,15 @@ class croniter(object): return result + def _timedelta_to_seconds(self, td): + """ + Converts a 'datetime.timedelta' object `td` into seconds contained in + the duration + """ + return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) \ + / 10**6 + + # iterator protocol, to enable direct use of croniter # objects in a loop, like "for dt in croniter('5 0 * * *'): ..." # or for combining multiple croniters into single diff --git a/src/croniter/tests/test_croniter.py b/src/croniter/tests/test_croniter.py index 91ade83..aa3c114 100755 --- a/src/croniter/tests/test_croniter.py +++ b/src/croniter/tests/test_croniter.py @@ -414,7 +414,7 @@ class CroniterTest(base.TestCase): for expected_date, expected_offset in expected_schedule: d = callback() self.assertEqual(expected_date, d.replace(tzinfo=None)) - self.assertEqual(expected_offset, d.utcoffset().total_seconds()) + self.assertEqual(expected_offset, croniter._timedelta_to_seconds(d.utcoffset())) def testTimezoneWinterTime(self): tz = pytz.timezone('Europe/Athens') -- cgit v1.2.1 From f7ba4bc74d420a7920f27bc97f0a3a889da00a95 Mon Sep 17 00:00:00 2001 From: Peter van 't Zand Date: Wed, 15 Jul 2015 14:06:03 +0200 Subject: the function should be a class method instead of instance method because it doesn't perform an action on the instance --- src/croniter/croniter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py index 758df18..b24d17e 100644 --- a/src/croniter/croniter.py +++ b/src/croniter/croniter.py @@ -167,7 +167,8 @@ class croniter(object): return result - def _timedelta_to_seconds(self, td): + @classmethod + def _timedelta_to_seconds(cls, td): """ Converts a 'datetime.timedelta' object `td` into seconds contained in the duration -- cgit v1.2.1 From fcc7902ab438a08afe74a8eabb3f43d06cd0d647 Mon Sep 17 00:00:00 2001 From: Peter van 't Zand Date: Thu, 19 Nov 2015 10:03:49 +0100 Subject: added python 2.6 comment so it won't be deleted --- src/croniter/croniter.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py index b24d17e..2a237a9 100644 --- a/src/croniter/croniter.py +++ b/src/croniter/croniter.py @@ -171,12 +171,13 @@ class croniter(object): def _timedelta_to_seconds(cls, td): """ Converts a 'datetime.timedelta' object `td` into seconds contained in - the duration + the duration. + Note: We cannot use `timedelta.total_seconds()` because this is not + supported by Python 2.6. """ return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) \ / 10**6 - # iterator protocol, to enable direct use of croniter # objects in a loop, like "for dt in croniter('5 0 * * *'): ..." # or for combining multiple croniters into single -- cgit v1.2.1