summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2020-04-10 12:20:27 +0200
committerMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2020-04-10 12:29:53 +0200
commit1c4c3d1dc9033711b73ba4082c84a60e3fe9c1b1 (patch)
treed2b6d59c464c654e13965d2d751b8b8cde14e63f
parent28e22e5aedf786100de51ea30d7aaae1f5aea764 (diff)
downloadcroniter-1c4c3d1dc9033711b73ba4082c84a60e3fe9c1b1.tar.gz
Document more second repears.0.3.28
This fixes taichino/croniter#122
-rw-r--r--README.rst15
-rw-r--r--docs/CHANGES.rst4
-rw-r--r--src/croniter/croniter.py24
-rwxr-xr-xsrc/croniter/tests/test_croniter.py11
4 files changed, 45 insertions, 9 deletions
diff --git a/README.rst b/README.rst
index f59817c..6979454 100644
--- a/README.rst
+++ b/README.rst
@@ -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)