diff options
author | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2023-09-05 21:04:27 +0100 |
---|---|---|
committer | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2022-02-18 15:11:20 +0100 |
commit | 8553df641f87c3fa820391b3282d94a721e89f90 (patch) | |
tree | 4f8c04101cef1af5dc52afb42da6ec02eb7fce44 | |
parent | 0bba6930ec0312bf7adf187c31e72c8bd3c57407 (diff) | |
download | croniter-8553df641f87c3fa820391b3282d94a721e89f90.tar.gz |
Again restore compat with py27
-rw-r--r-- | docs/CHANGES.rst | 3 | ||||
-rw-r--r-- | src/croniter/__init__.py | 1 | ||||
-rw-r--r-- | src/croniter/croniter.py | 20 | ||||
-rwxr-xr-x | src/croniter/tests/test_croniter.py | 5 |
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() |