Skip to content

Commit f5ac3db

Browse files
JabberWocky-22zhouyizhen
and
zhouyizhen
authored
ensure match return false when not time available (#81)
Co-authored-by: zhouyizhen <[email protected]>
1 parent a05e9bd commit f5ac3db

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/croniter/croniter.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -929,12 +929,15 @@ def match_range(cls, cron_expression, from_datetime, to_datetime,
929929
day_or=True, second_at_beginning=False):
930930
cron = cls(cron_expression, to_datetime, ret_type=datetime.datetime,
931931
day_or=day_or, second_at_beginning=second_at_beginning)
932-
td, ms1 = cron.get_current(datetime.datetime), relativedelta(microseconds=1)
933-
if not td.microsecond:
934-
td = td + ms1
935-
cron.set_current(td, force=True)
936-
tdp, tdt = cron.get_current(), cron.get_prev()
937-
precision_in_seconds = 1 if len(cron.expanded) == 6 else 60
932+
tdp = cron.get_current(datetime.datetime)
933+
if not tdp.microsecond:
934+
tdp += relativedelta(microseconds=1)
935+
cron.set_current(tdp, force=True)
936+
try:
937+
tdt = cron.get_prev()
938+
except CroniterBadDateError:
939+
return False
940+
precision_in_seconds = 1 if len(cron.expanded) > UNIX_CRON_LEN else 60
938941
duration_in_second = (to_datetime - from_datetime).total_seconds() + precision_in_seconds
939942
return (max(tdp, tdt) - min(tdp, tdt)).total_seconds() < duration_in_second
940943

src/croniter/tests/test_croniter.py

+8
Original file line numberDiff line numberDiff line change
@@ -1088,6 +1088,14 @@ def test_match(self):
10881088
day_or=False
10891089
))
10901090

1091+
def test_match_handle_bad_cron(self):
1092+
# some cron expression can't get prev value and should not raise exception
1093+
self.assertFalse(croniter.match(
1094+
'0 0 31 1 1#1',
1095+
datetime(2020, 1, 31),
1096+
day_or=False
1097+
))
1098+
10911099
def test_match_range(self):
10921100
self.assertTrue(croniter.match_range(
10931101
"0 0 * * *",

0 commit comments

Comments
 (0)