diff options
author | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2020-04-10 12:20:27 +0200 |
---|---|---|
committer | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2020-04-10 12:29:53 +0200 |
commit | 1c4c3d1dc9033711b73ba4082c84a60e3fe9c1b1 (patch) | |
tree | d2b6d59c464c654e13965d2d751b8b8cde14e63f | |
parent | 28e22e5aedf786100de51ea30d7aaae1f5aea764 (diff) | |
download | croniter-1c4c3d1dc9033711b73ba4082c84a60e3fe9c1b1.tar.gz |
Document more second repears.0.3.28
This fixes taichino/croniter#122
-rw-r--r-- | README.rst | 15 | ||||
-rw-r--r-- | docs/CHANGES.rst | 4 | ||||
-rw-r--r-- | src/croniter/croniter.py | 24 | ||||
-rwxr-xr-x | src/croniter/tests/test_croniter.py | 11 |
4 files changed, 45 insertions, 9 deletions
@@ -95,6 +95,21 @@ Be sure to init your croniter instance with a TZ aware datetime for this to work >>> local_date = tz.localize(datetime(2017, 3, 26)) >>> val = croniter('0 0 * * *', local_date).get_next(datetime) +About second repeats +===================== +Croniter is able to do second repeatition crontabs form + + >>> croniter('* * * * * 1', local_date).get_next(datetime) + >>> base = datetime(2012, 4, 6, 13, 26, 10) + >>> itr = croniter('* * * * * 15,25', base) + >>> itr.get_next(datetime) # 4/6 13:26:15 + >>> itr.get_next(datetime) # 4/6 13:26:25 + >>> itr.get_next(datetime) # 4/6 13:27:15 + +You can also note that this expression will repeat every second from the start datetime. + + >>> croniter('* * * * * *', local_date).get_next(datetime) + Develop this package ==================== diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index 0edef97..8540d2a 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -3,8 +3,8 @@ Changelog 0.3.32 (unreleased) ------------------- - -- Nothing changed yet. +- document seconds repeats + [kiorky] 0.3.31 (2020-01-02) diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py index a95f1e7..e8fddd5 100644 --- a/src/croniter/croniter.py +++ b/src/croniter/croniter.py @@ -80,13 +80,11 @@ class croniter(object): start_time = time() self.tzinfo = None - if isinstance(start_time, datetime.datetime): - self.tzinfo = start_time.tzinfo - start_time = self._datetime_to_timestamp(start_time) - self.start_time = start_time - self.dst_start_time = start_time - self.cur = start_time + self.start_time = None + self.dst_start_time = None + self.cur = None + self.set_current(start_time) self.expanded, self.nth_weekday_of_month = self.expand(expr_format) @@ -98,7 +96,9 @@ class croniter(object): raise CroniterNotAlphaError( "[{0}] is not acceptable".format(" ".join(expressions))) - def get_next(self, ret_type=None): + def get_next(self, ret_type=None, start_time=None): + if start_time is not None: + self.set_current(start_time) return self._get_next(ret_type or self._ret_type, is_prev=False) def get_prev(self, ret_type=None): @@ -110,6 +110,16 @@ class croniter(object): return self._timestamp_to_datetime(self.cur) return self.cur + def set_current(self, start_time): + if isinstance(start_time, datetime.datetime): + self.tzinfo = start_time.tzinfo + start_time = self._datetime_to_timestamp(start_time) + + self.start_time = start_time + self.dst_start_time = start_time + self.cur = start_time + return self.cur + @classmethod def _datetime_to_timestamp(cls, d): """ diff --git a/src/croniter/tests/test_croniter.py b/src/croniter/tests/test_croniter.py index 907f632..fc4e706 100755 --- a/src/croniter/tests/test_croniter.py +++ b/src/croniter/tests/test_croniter.py @@ -12,6 +12,17 @@ from croniter.tests import base class CroniterTest(base.TestCase): + def testSecondSec(self): + base = datetime(2012, 4, 6, 13, 26, 10) + itr = croniter('* * * * * 15,25', base) + n = itr.get_next(datetime) + self.assertEqual(15, n.second) + n = itr.get_next(datetime) + self.assertEqual(25, n.second) + n = itr.get_next(datetime) + self.assertEqual(15, n.second) + self.assertEqual(27, n.minute) + def testSecond(self): base = datetime(2012, 4, 6, 13, 26, 10) itr = croniter('*/1 * * * * *', base) |