summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2023-09-05 21:04:27 +0100
committerMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2022-02-18 15:11:20 +0100
commit8553df641f87c3fa820391b3282d94a721e89f90 (patch)
tree4f8c04101cef1af5dc52afb42da6ec02eb7fce44
parent0bba6930ec0312bf7adf187c31e72c8bd3c57407 (diff)
downloadcroniter-8553df641f87c3fa820391b3282d94a721e89f90.tar.gz
Again restore compat with py27
-rw-r--r--docs/CHANGES.rst3
-rw-r--r--src/croniter/__init__.py1
-rw-r--r--src/croniter/croniter.py20
-rwxr-xr-xsrc/croniter/tests/test_croniter.py5
4 files changed, 20 insertions, 9 deletions
diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst
index 03a6d7c..0eb8e25 100644
--- a/docs/CHANGES.rst
+++ b/docs/CHANGES.rst
@@ -4,7 +4,8 @@ Changelog
1.3.4 (unreleased)
------------------
-- Nothing changed yet.
+- Really fix compat for tests under py27
+ [kiorky]
1.3.3 (2022-02-18)
diff --git a/src/croniter/__init__.py b/src/croniter/__init__.py
index 406263b..889e230 100644
--- a/src/croniter/__init__.py
+++ b/src/croniter/__init__.py
@@ -2,6 +2,7 @@
from __future__ import absolute_import
from .croniter import (
croniter,
+ datetime_to_timestamp,
croniter_range,
CroniterBadTypeRangeError, # noqa
CroniterBadDateError, # noqa
diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py
index d575883..16d784f 100644
--- a/src/croniter/croniter.py
+++ b/src/croniter/croniter.py
@@ -31,6 +31,18 @@ hash_expression_re = re.compile(
VALID_LEN_EXPRESSION = [5, 6]
+def timedelta_to_seconds(td):
+ return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) \
+ / 10**6
+
+
+def datetime_to_timestamp(d):
+ if d.tzinfo is not None:
+ d = d.replace(tzinfo=None) - d.utcoffset()
+
+ return timedelta_to_seconds(d - datetime.datetime(1970, 1, 1))
+
+
def _get_caller_globals_and_locals():
"""
Returns the globals and locals of the calling frame.
@@ -191,10 +203,7 @@ class croniter(object):
"""
Converts a `datetime` object `d` into a UNIX timestamp.
"""
- if d.tzinfo is not None:
- d = d.replace(tzinfo=None) - d.utcoffset()
-
- return cls._timedelta_to_seconds(d - datetime.datetime(1970, 1, 1))
+ return datetime_to_timestamp(d)
def _timestamp_to_datetime(self, timestamp):
"""
@@ -214,8 +223,7 @@ class croniter(object):
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
+ return timedelta_to_seconds(td)
def _get_next(self, ret_type=None, start_time=None, is_prev=None):
self.set_current(start_time, force=True)
diff --git a/src/croniter/tests/test_croniter.py b/src/croniter/tests/test_croniter.py
index ba0372d..60de988 100755
--- a/src/croniter/tests/test_croniter.py
+++ b/src/croniter/tests/test_croniter.py
@@ -6,7 +6,7 @@ from datetime import datetime, timedelta
from functools import partial
from time import sleep
import pytz
-from croniter import (croniter, CroniterBadDateError, CroniterBadCronError,
+from croniter import (croniter, CroniterBadDateError, CroniterBadCronError, datetime_to_timestamp,
CroniterNotAlphaError, CroniterUnsupportedSyntaxError)
from croniter.tests import base
import dateutil.tz
@@ -1458,7 +1458,8 @@ class CroniterTest(base.TestCase):
itr.set_current(start_time=base)
n1 = itr.get_next() # 19
- self.assertEqual(n1, base.timestamp() + 60)
+ self.assertEqual(n1, datetime_to_timestamp(base) + 60)
+
if __name__ == '__main__':
unittest.main()