Merge pull request #51 from kiorky/master

backport
This commit is contained in:
Mathieu Le Marec - Pasquet 2016-01-13 10:21:19 +01:00
commit 13bde87e71
4 changed files with 59 additions and 4 deletions

View File

@ -1,16 +1,24 @@
Changelog
==============
0.3.11 (unreleased)
0.3.12 (unreleased)
-------------------
- Nothing changed yet.
0.3.11 (2016-01-13)
-------------------
- Bug fix: The get_prev API crashed when last day of month token was used. Some
essential logic was missing.
[Iddo Aviram <iddo.aviram@similarweb.com>]
0.3.10 (2015-11-29)
-------------------
- The fuctionality of 'l' as day of month was brokne, since the month variable
- The fuctionality of 'l' as day of month was broken, since the month variable
was not properly updated
[Iddo Aviram <iddo.aviram@similarweb.com>]

View File

@ -17,7 +17,7 @@ long_description = "\n\n".join(
setup(
name='croniter',
version='0.3.11.dev0',
version='0.3.12.dev0',
py_modules=['croniter', ],
description=(
'croniter provides iteration for datetime '

View File

@ -271,6 +271,8 @@ class croniter(object):
days = DAYS[month - 1]
if month == 2 and self.is_leap(year) is True:
days += 1
if 'l' in expanded[2] and days==d.day:
return False, d
if is_prev:
days_in_prev_month = DAYS[
@ -387,8 +389,10 @@ class croniter(object):
candidates = to_check[:]
candidates.reverse()
for d in candidates:
if d <= x:
if d != 'l' and d <= x:
return d - x
if 'l' in candidates:
return -x
candidate = candidates[0]
for c in candidates:
if c < range_val:

View File

@ -180,6 +180,49 @@ class CroniterTest(base.TestCase):
self.assertEqual(n4.month, 12)
self.assertEqual(n4.day, 31)
def testPrevLastDayOfMonth(self):
base = datetime(2009, 12, 31, hour=20)
itr = croniter('0 0 l * *', base)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 12)
self.assertEqual(n1.day, 31)
base = datetime(2009, 12, 31)
itr = croniter('0 0 l * *', base)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 11)
self.assertEqual(n1.day, 30)
base = datetime(2010, 1, 5)
itr = croniter('0 0 l * *', base)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 12)
self.assertEqual(n1.day, 31)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 11)
self.assertEqual(n1.day, 30)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 10)
self.assertEqual(n1.day, 31)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 9)
self.assertEqual(n1.day, 30)
base = datetime(2010, 1, 31, minute=2)
itr = croniter('* * l * *', base)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 1)
self.assertEqual(n1.day, 31)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 1)
self.assertEqual(n1.day, 31)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 12)
self.assertEqual(n1.day, 31)
n1 = itr.get_prev(datetime)
self.assertEqual(n1.month, 12)
self.assertEqual(n1.day, 31)
def testError(self):
itr = croniter('* * * * *')
self.assertRaises(TypeError, itr.get_next, str)