Skip to content

Commit 8a906c3

Browse files
committed
Handle -Sun notation
This fixes #119.
1 parent e2d918e commit 8a906c3

File tree

2 files changed

+73
-3
lines changed

2 files changed

+73
-3
lines changed

src/croniter/croniter.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -507,8 +507,12 @@ def expand(cls, expr_format):
507507
not low or not high or int(low) > int(high)
508508
or not only_int_re.search(str(step))
509509
):
510-
raise CroniterBadDateError(
511-
"[{0}] is not acceptable".format(expr_format))
510+
if i == 4 and high == '0':
511+
# handle -Sun notation -> 7
512+
high = '7'
513+
else:
514+
raise CroniterBadDateError(
515+
"[{0}] is not acceptable".format(expr_format))
512516

513517
low, high, step = map(int, [low, high, step])
514518
try:

src/croniter/tests/test_croniter.py

+67-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# -*- coding: utf-8 -*-
33

44
import unittest
5-
from datetime import datetime
5+
from datetime import datetime, timedelta
66
from time import sleep
77
import pytz
88
from croniter import croniter, CroniterBadDateError, CroniterBadCronError, CroniterNotAlphaError
@@ -835,6 +835,72 @@ def test_milliseconds(self):
835835
def test_invalid_zerorepeat(self):
836836
self.assertFalse(croniter.is_valid('*/0 * * * *'))
837837

838+
def test_weekday_range(self):
839+
ret = []
840+
# jan 14 is monday
841+
dt = datetime(2019, 1, 14, 0, 0, 0, 0)
842+
for i in range(10):
843+
c = croniter("0 0 * * 2-4 *", start_time=dt)
844+
dt = datetime.utcfromtimestamp(c.get_next())
845+
ret.append(dt)
846+
dt += timedelta(days=1)
847+
sret = ["{0}".format(r) for r in ret]
848+
self.assertEquals(
849+
sret,
850+
['2019-01-15 00:00:00',
851+
'2019-01-16 00:00:01',
852+
'2019-01-17 00:00:02',
853+
'2019-01-22 00:00:00',
854+
'2019-01-23 00:00:01',
855+
'2019-01-24 00:00:02',
856+
'2019-01-29 00:00:00',
857+
'2019-01-30 00:00:01',
858+
'2019-01-31 00:00:02',
859+
'2019-02-05 00:00:00'])
860+
ret = []
861+
dt = datetime(2019, 1, 14, 0, 0, 0, 0)
862+
for i in range(10):
863+
c = croniter("0 0 * * 1-7 *", start_time=dt)
864+
dt = datetime.utcfromtimestamp(c.get_next())
865+
ret.append(dt)
866+
dt += timedelta(days=1)
867+
sret = ["{0}".format(r) for r in ret]
868+
self.assertEquals(
869+
sret,
870+
['2019-01-14 00:00:01',
871+
'2019-01-15 00:00:02',
872+
'2019-01-16 00:00:03',
873+
'2019-01-17 00:00:04',
874+
'2019-01-18 00:00:05',
875+
'2019-01-19 00:00:06',
876+
'2019-01-20 00:00:07',
877+
'2019-01-21 00:00:08',
878+
'2019-01-22 00:00:09',
879+
'2019-01-23 00:00:10'])
880+
881+
def test_issue_monsun_117(self):
882+
ret = []
883+
dt = datetime(2019, 1, 14, 0, 0, 0, 0)
884+
for i in range(10):
885+
# c = croniter("0 0 * * Mon-Sun *", start_time=dt)
886+
c = croniter("0 0 * * Wed-Sun *", start_time=dt)
887+
dt = datetime.utcfromtimestamp(c.get_next())
888+
ret.append(dt)
889+
dt += timedelta(days=1)
890+
sret = ["{0}".format(r) for r in ret]
891+
self.assertEquals(
892+
sret,
893+
['2019-01-16 00:00:00',
894+
'2019-01-17 00:00:01',
895+
'2019-01-18 00:00:02',
896+
'2019-01-19 00:00:03',
897+
'2019-01-20 00:00:04',
898+
'2019-01-23 00:00:00',
899+
'2019-01-24 00:00:01',
900+
'2019-01-25 00:00:02',
901+
'2019-01-26 00:00:03',
902+
'2019-01-27 00:00:04'])
903+
838904

839905
if __name__ == '__main__':
840906
unittest.main()

0 commit comments

Comments
 (0)