diff options
| author | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2021-12-03 20:57:55 +0100 |
|---|---|---|
| committer | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2021-12-03 20:57:55 +0100 |
| commit | 8e5c9e07dfdae13a5cd09ed51048d78c005a67af (patch) | |
| tree | 82d13981cb76777757da51bfb53a3e921d433550 | |
| parent | bf19b21add35a57c48018fc21ef2468bc0410863 (diff) | |
| download | croniter-8e5c9e07dfdae13a5cd09ed51048d78c005a67af.tar.gz | |
Be stricter on month=0
This relates #6
| -rw-r--r-- | docs/CHANGES.rst | 6 | ||||
| -rw-r--r-- | src/croniter/croniter.py | 8 | ||||
| -rwxr-xr-x | src/croniter/tests/test_croniter.py | 25 |
3 files changed, 24 insertions, 15 deletions
diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index d1d7ae6..25d28c4 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -1,11 +1,11 @@ Changelog ============== -1.0.16 (unreleased) +1.1.0 (unreleased) ------------------- -- Nothing changed yet. - +- Enforce validation for month=1. Before this release we used to support month=0 and it was silently glided to month=1 to support having both day in month 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 + [kiorky] 1.0.15 (2021-06-25) ------------------- diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py index e96ea52..a2c162e 100644 --- a/src/croniter/croniter.py +++ b/src/croniter/croniter.py @@ -712,7 +712,13 @@ class croniter(object): except ValueError: pass - if t in cls.LOWMAP[i]: + if t in cls.LOWMAP[i] and not ( + # do not support 0 as a month either for classical 5 fields cron + # or 6fields second repeat form + # but still let conversion happen if day field is shifted + (i == 3 and len(expressions) == 5) or + (i == 4 and len(expressions) == 6) + ): t = cls.LOWMAP[i][t] if ( diff --git a/src/croniter/tests/test_croniter.py b/src/croniter/tests/test_croniter.py index 413329f..e7d1c96 100755 --- a/src/croniter/tests/test_croniter.py +++ b/src/croniter/tests/test_croniter.py @@ -317,14 +317,14 @@ class CroniterTest(base.TestCase): wildcard = ['*'] m, h, d, mon, dow, s = range(6) # Test each field individually - self.assertEqual(croniter('0-59 0 0 0 0').expanded[m], wildcard) - self.assertEqual(croniter('0 0-23 0 0 0').expanded[h], wildcard) - self.assertEqual(croniter('0 0 0-31 0 0').expanded[d], wildcard) + self.assertEqual(croniter('0-59 0 0 1 0').expanded[m], wildcard) + self.assertEqual(croniter('0 0-23 0 1 0').expanded[h], wildcard) + self.assertEqual(croniter('0 0 0-31 1 0').expanded[d], wildcard) self.assertEqual(croniter('0 0 0 1-12 0').expanded[mon], wildcard) - self.assertEqual(croniter('0 0 0 0 0-6').expanded[dow], wildcard) - self.assertEqual(croniter('0 0 0 0 1-7').expanded[dow], wildcard) - self.assertEqual(croniter('0 0 0 0 1-7,sat#3').expanded[dow], wildcard) - self.assertEqual(croniter('0 0 0 0 0 0-59').expanded[s], wildcard) + self.assertEqual(croniter('0 0 0 1 0-6').expanded[dow], wildcard) + self.assertEqual(croniter('0 0 0 1 1-7').expanded[dow], wildcard) + self.assertEqual(croniter('0 0 0 1 1-7,sat#3').expanded[dow], wildcard) + self.assertEqual(croniter('0 0 0 1 0 0-59').expanded[s], wildcard) # Real life examples self.assertEqual(croniter('30 1-12,0,10-23 15-21 * fri').expanded[h], wildcard) self.assertEqual(croniter('30 1-23,0 15-21 * fri').expanded[h], wildcard) @@ -993,12 +993,12 @@ class CroniterTest(base.TestCase): '2019-01-17 00:00:01', '2019-01-18 00:00:02', '2019-01-19 00:00:03', - '2019-01-20 00:00:04', '2019-01-23 00:00:00', '2019-01-24 00:00:01', '2019-01-25 00:00:02', '2019-01-26 00:00:03', - '2019-01-27 00:00:04']) + '2019-01-30 00:00:00', + '2019-01-31 00:00:01']) def test_mixdow(self): base = datetime(2018, 10, 1, 0, 0) @@ -1433,11 +1433,14 @@ class CroniterTest(base.TestCase): def test_confirm_sort(self): m, h, d, mon, dow, s = range(6) - self.assertListEqual(croniter('0 8,22,10,23 0 0 0').expanded[h], [8, 10, 22, 23]) - self.assertListEqual(croniter('0 0 25-L 0 0').expanded[d], [25, 26, 27, 28, 29, 30, 31]) + self.assertListEqual(croniter('0 8,22,10,23 0 1 0').expanded[h], [8, 10, 22, 23]) + self.assertListEqual(croniter('0 0 25-L 1 0').expanded[d], [25, 26, 27, 28, 29, 30, 31]) self.assertListEqual(croniter("1 1 7,14,21,L * *").expanded[d], [7, 14, 21, "l"]) self.assertListEqual(croniter("0 0 * * *,sat#3").expanded[dow], ["*", 6]) + def test_issue_k6(self): + self.assertRaises(CroniterBadCronError, croniter, '0 0 0 0 0') + if __name__ == '__main__': unittest.main() |
