From d611e66093ab5485018a9b48287a253ec947b9f0 Mon Sep 17 00:00:00 2001 From: iddo Date: Tue, 12 Jan 2016 21:47:41 +0200 Subject: Bug fix: The get_prev API crashed when last day of month token was used. Some essential logic was missing. --- src/croniter/croniter.py | 6 +++++- src/croniter/tests/test_croniter.py | 43 +++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py index eabb241..0f9d468 100644 --- a/src/croniter/croniter.py +++ b/src/croniter/croniter.py @@ -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: diff --git a/src/croniter/tests/test_croniter.py b/src/croniter/tests/test_croniter.py index f8ac6f6..0baa9c0 100755 --- a/src/croniter/tests/test_croniter.py +++ b/src/croniter/tests/test_croniter.py @@ -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) -- cgit v1.2.1 From dfb750f335e017c2c5bd4ff58b3e361757716bf6 Mon Sep 17 00:00:00 2001 From: Mathieu Le Marec - Pasquet Date: Wed, 13 Jan 2016 10:18:57 +0100 Subject: changelog --- docs/CHANGES.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index 49548b0..d703f98 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -4,13 +4,15 @@ Changelog 0.3.11 (unreleased) ------------------- -- Nothing changed yet. +- Bug fix: The get_prev API crashed when last day of month token was used. Some + essential logic was missing. + [Iddo Aviram ] 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 ] -- cgit v1.2.1 From 2cd5d2a39255f7a5e0fe5d7bbadc1372b4a85212 Mon Sep 17 00:00:00 2001 From: Mathieu Le Marec - Pasquet Date: Wed, 13 Jan 2016 10:19:15 +0100 Subject: Preparing release 0.3.11 --- docs/CHANGES.rst | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index d703f98..5345818 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -1,7 +1,7 @@ Changelog ============== -0.3.11 (unreleased) +0.3.11 (2016-01-13) ------------------- - Bug fix: The get_prev API crashed when last day of month token was used. Some diff --git a/setup.py b/setup.py index 6bd595d..344e9c7 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ long_description = "\n\n".join( setup( name='croniter', - version='0.3.11.dev0', + version='0.3.11', py_modules=['croniter', ], description=( 'croniter provides iteration for datetime ' -- cgit v1.2.1 From 5f7109f31e1d1b759b9e20a3e4ca615aa348e044 Mon Sep 17 00:00:00 2001 From: Mathieu Le Marec - Pasquet Date: Wed, 13 Jan 2016 10:19:36 +0100 Subject: Back to development: 0.3.12 --- docs/CHANGES.rst | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/CHANGES.rst b/docs/CHANGES.rst index 5345818..a4e5def 100644 --- a/docs/CHANGES.rst +++ b/docs/CHANGES.rst @@ -1,6 +1,12 @@ Changelog ============== +0.3.12 (unreleased) +------------------- + +- Nothing changed yet. + + 0.3.11 (2016-01-13) ------------------- diff --git a/setup.py b/setup.py index 344e9c7..1e0e308 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ long_description = "\n\n".join( setup( name='croniter', - version='0.3.11', + version='0.3.12.dev0', py_modules=['croniter', ], description=( 'croniter provides iteration for datetime ' -- cgit v1.2.1