Add value boundary check.
This commit is contained in:
parent
0beeb95d76
commit
f64032825a
2 changed files with 20 additions and 4 deletions
|
@ -293,6 +293,12 @@ class _Matcher(object):
|
||||||
_assert(start <= end,
|
_assert(start <= end,
|
||||||
"%s range start value %r > end value %r",
|
"%s range start value %r > end value %r",
|
||||||
_attribute[which], start, end)
|
_attribute[which], start, end)
|
||||||
|
|
||||||
|
if increment:
|
||||||
|
next_value = start + increment
|
||||||
|
_assert(next_value <= _end_limit,
|
||||||
|
"the first next value %r out of range [%r, %r]",
|
||||||
|
next_value, start, _end_limit)
|
||||||
return set(range(start, end+1, increment or 1))
|
return set(range(start, end+1, increment or 1))
|
||||||
|
|
||||||
_start, _end = _ranges[which]
|
_start, _end = _ranges[which]
|
||||||
|
@ -320,6 +326,10 @@ class _Matcher(object):
|
||||||
"last <day> specifier must include a day number or range in the 'weekday' field, you entered %r", entry)
|
"last <day> specifier must include a day number or range in the 'weekday' field, you entered %r", entry)
|
||||||
return None, _end
|
return None, _end
|
||||||
|
|
||||||
|
# allow Sunday to be specified as weekday 7
|
||||||
|
if which == WEEK_OFFSET:
|
||||||
|
_end_limit = 7
|
||||||
|
|
||||||
increment = None
|
increment = None
|
||||||
# increments
|
# increments
|
||||||
if '/' in entry:
|
if '/' in entry:
|
||||||
|
@ -328,10 +338,11 @@ class _Matcher(object):
|
||||||
_assert(increment > 0,
|
_assert(increment > 0,
|
||||||
"you can only use positive increment values, you provided %r",
|
"you can only use positive increment values, you provided %r",
|
||||||
increment)
|
increment)
|
||||||
|
exceed_limit_error_msg_tpl = ("you can only use increment values "
|
||||||
# allow Sunday to be specified as weekday 7
|
"which less than or equal to the %r")
|
||||||
if which == WEEK_OFFSET:
|
_assert(increment <= _end_limit,
|
||||||
_end_limit = 7
|
exceed_limit_error_msg_tpl,
|
||||||
|
_end_limit)
|
||||||
|
|
||||||
# handle singles and ranges
|
# handle singles and ranges
|
||||||
good = _parse_piece(entry)
|
good = _parse_piece(entry)
|
||||||
|
|
|
@ -161,6 +161,11 @@ class TestCrontab(unittest.TestCase):
|
||||||
self.assertRaises(ValueError, lambda: CronTab('* * 32 * *'))
|
self.assertRaises(ValueError, lambda: CronTab('* * 32 * *'))
|
||||||
self.assertRaises(ValueError, lambda: CronTab('* * * 13 *'))
|
self.assertRaises(ValueError, lambda: CronTab('* * * 13 *'))
|
||||||
self.assertRaises(ValueError, lambda: CronTab('* * * * 9999'))
|
self.assertRaises(ValueError, lambda: CronTab('* * * * 9999'))
|
||||||
|
self.assertRaises(ValueError, lambda: CronTab('20/50 * * * * *'))
|
||||||
|
self.assertRaises(ValueError, lambda: CronTab('0/100 * * * * *'))
|
||||||
|
self.assertRaises(ValueError, lambda: CronTab('*,50-59/12 * * * *'))
|
||||||
|
self.assertRaises(ValueError, lambda: CronTab('* * * DEC/7 * *'))
|
||||||
|
self.assertRaises(ValueError, lambda: CronTab('* * * * MON/7 *'))
|
||||||
|
|
||||||
def test_previous(self):
|
def test_previous(self):
|
||||||
schedule = CronTab('0 * * * *')
|
schedule = CronTab('0 * * * *')
|
||||||
|
|
Loading…
Reference in a new issue