Skip to content

Commit 6f40ce3

Browse files
committed
Be stricter on day=0
This relates #9
1 parent 8d21aff commit 6f40ce3

File tree

3 files changed

+41
-39
lines changed

3 files changed

+41
-39
lines changed

docs/CHANGES.rst

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
Changelog
22
==============
33

4-
1.1.1 (unreleased)
4+
1.2.0 (unreleased)
55
------------------
66

7-
- Nothing changed yet.
8-
7+
- Enforce validation for day=1. Before this release we used to support day=0 and it was silently glided to day=1 to support having both day in day in 4th field when it came to have 6fields cron forms (second repeat). It will now raises a CroniterBadDateError. See https://github.com/kiorky/croniter/issues/6
8+
[kiorky]
99

1010
1.1.0 (2021-12-03)
1111
------------------

src/croniter/croniter.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -716,8 +716,8 @@ def _expand(cls, expr_format, hash_id=None):
716716
# do not support 0 as a month either for classical 5 fields cron
717717
# or 6fields second repeat form
718718
# but still let conversion happen if day field is shifted
719-
(i == 3 and len(expressions) == 5) or
720-
(i == 4 and len(expressions) == 6)
719+
(i in [2, 3] and len(expressions) == 5) or
720+
(i in [3, 4] and len(expressions) == 6)
721721
):
722722
t = cls.LOWMAP[i][t]
723723

src/croniter/tests/test_croniter.py

+36-34
Original file line numberDiff line numberDiff line change
@@ -317,14 +317,14 @@ def testOptimizeCronExpressions(self):
317317
wildcard = ['*']
318318
m, h, d, mon, dow, s = range(6)
319319
# Test each field individually
320-
self.assertEqual(croniter('0-59 0 0 1 0').expanded[m], wildcard)
321-
self.assertEqual(croniter('0 0-23 0 1 0').expanded[h], wildcard)
322-
self.assertEqual(croniter('0 0 0-31 1 0').expanded[d], wildcard)
323-
self.assertEqual(croniter('0 0 0 1-12 0').expanded[mon], wildcard)
324-
self.assertEqual(croniter('0 0 0 1 0-6').expanded[dow], wildcard)
325-
self.assertEqual(croniter('0 0 0 1 1-7').expanded[dow], wildcard)
326-
self.assertEqual(croniter('0 0 0 1 1-7,sat#3').expanded[dow], wildcard)
327-
self.assertEqual(croniter('0 0 0 1 0 0-59').expanded[s], wildcard)
320+
self.assertEqual(croniter('0-59 0 1 1 0').expanded[m], wildcard)
321+
self.assertEqual(croniter('0 0-23 1 1 0').expanded[h], wildcard)
322+
self.assertEqual(croniter('0 0 1-31 1 0').expanded[d], wildcard)
323+
self.assertEqual(croniter('0 0 1 1-12 0').expanded[mon], wildcard)
324+
self.assertEqual(croniter('0 0 1 1 0-6').expanded[dow], wildcard)
325+
self.assertEqual(croniter('0 0 1 1 1-7').expanded[dow], wildcard)
326+
self.assertEqual(croniter('0 0 1 1 1-7,sat#3').expanded[dow], wildcard)
327+
self.assertEqual(croniter('0 0 1 1 0 0-59').expanded[s], wildcard)
328328
# Real life examples
329329
self.assertEqual(croniter('30 1-12,0,10-23 15-21 * fri').expanded[h], wildcard)
330330
self.assertEqual(croniter('30 1-23,0 15-21 * fri').expanded[h], wildcard)
@@ -1342,41 +1342,42 @@ def test_issue_47(self):
13421342
self.assertEqual(prev1.hour, 6)
13431343
self.assertEqual(prev1.minute, 0)
13441344

1345+
maxDiff = None
13451346
def test_issue_142_dow(self):
13461347
ret = []
13471348
for i in range(1, 31):
13481349
ret.append((i,
1349-
croniter('35 * 0-l/8 * *', datetime(2020, 1, i),
1350+
croniter('35 * 1-l/8 * *', datetime(2020, 1, i),
13501351
ret_type=datetime).get_next())
13511352
)
13521353
i += 1
13531354
self.assertEqual(
13541355
ret,
13551356
[(1, datetime(2020, 1, 1, 0, 35)),
1356-
(2, datetime(2020, 1, 8, 0, 35)),
1357-
(3, datetime(2020, 1, 8, 0, 35)),
1358-
(4, datetime(2020, 1, 8, 0, 35)),
1359-
(5, datetime(2020, 1, 8, 0, 35)),
1360-
(6, datetime(2020, 1, 8, 0, 35)),
1361-
(7, datetime(2020, 1, 8, 0, 35)),
1362-
(8, datetime(2020, 1, 8, 0, 35)),
1363-
(9, datetime(2020, 1, 16, 0, 35)),
1364-
(10, datetime(2020, 1, 16, 0, 35)),
1365-
(11, datetime(2020, 1, 16, 0, 35)),
1366-
(12, datetime(2020, 1, 16, 0, 35)),
1367-
(13, datetime(2020, 1, 16, 0, 35)),
1368-
(14, datetime(2020, 1, 16, 0, 35)),
1369-
(15, datetime(2020, 1, 16, 0, 35)),
1370-
(16, datetime(2020, 1, 16, 0, 35)),
1371-
(17, datetime(2020, 1, 24, 0, 35)),
1372-
(18, datetime(2020, 1, 24, 0, 35)),
1373-
(19, datetime(2020, 1, 24, 0, 35)),
1374-
(20, datetime(2020, 1, 24, 0, 35)),
1375-
(21, datetime(2020, 1, 24, 0, 35)),
1376-
(22, datetime(2020, 1, 24, 0, 35)),
1377-
(23, datetime(2020, 1, 24, 0, 35)),
1378-
(24, datetime(2020, 1, 24, 0, 35)),
1379-
(25, datetime(2020, 2, 1, 0, 35)),
1357+
(2, datetime(2020, 1, 9, 0, 35)),
1358+
(3, datetime(2020, 1, 9, 0, 35)),
1359+
(4, datetime(2020, 1, 9, 0, 35)),
1360+
(5, datetime(2020, 1, 9, 0, 35)),
1361+
(6, datetime(2020, 1, 9, 0, 35)),
1362+
(7, datetime(2020, 1, 9, 0, 35)),
1363+
(8, datetime(2020, 1, 9, 0, 35)),
1364+
(9, datetime(2020, 1, 9, 0, 35)),
1365+
(10, datetime(2020, 1, 17, 0, 35)),
1366+
(11, datetime(2020, 1, 17, 0, 35)),
1367+
(12, datetime(2020, 1, 17, 0, 35)),
1368+
(13, datetime(2020, 1, 17, 0, 35)),
1369+
(14, datetime(2020, 1, 17, 0, 35)),
1370+
(15, datetime(2020, 1, 17, 0, 35)),
1371+
(16, datetime(2020, 1, 17, 0, 35)),
1372+
(17, datetime(2020, 1, 17, 0, 35)),
1373+
(18, datetime(2020, 1, 25, 0, 35)),
1374+
(19, datetime(2020, 1, 25, 0, 35)),
1375+
(20, datetime(2020, 1, 25, 0, 35)),
1376+
(21, datetime(2020, 1, 25, 0, 35)),
1377+
(22, datetime(2020, 1, 25, 0, 35)),
1378+
(23, datetime(2020, 1, 25, 0, 35)),
1379+
(24, datetime(2020, 1, 25, 0, 35)),
1380+
(25, datetime(2020, 1, 25, 0, 35)),
13801381
(26, datetime(2020, 2, 1, 0, 35)),
13811382
(27, datetime(2020, 2, 1, 0, 35)),
13821383
(28, datetime(2020, 2, 1, 0, 35)),
@@ -1433,13 +1434,14 @@ def test_issue156(self):
14331434

14341435
def test_confirm_sort(self):
14351436
m, h, d, mon, dow, s = range(6)
1436-
self.assertListEqual(croniter('0 8,22,10,23 0 1 0').expanded[h], [8, 10, 22, 23])
1437+
self.assertListEqual(croniter('0 8,22,10,23 1 1 0').expanded[h], [8, 10, 22, 23])
14371438
self.assertListEqual(croniter('0 0 25-L 1 0').expanded[d], [25, 26, 27, 28, 29, 30, 31])
14381439
self.assertListEqual(croniter("1 1 7,14,21,L * *").expanded[d], [7, 14, 21, "l"])
14391440
self.assertListEqual(croniter("0 0 * * *,sat#3").expanded[dow], ["*", 6])
14401441

14411442
def test_issue_k6(self):
14421443
self.assertRaises(CroniterBadCronError, croniter, '0 0 0 0 0')
1444+
self.assertRaises(CroniterBadCronError, croniter, '0 0 0 1 0')
14431445

14441446

14451447
if __name__ == '__main__':

0 commit comments

Comments
 (0)