diff options
author | Matsumoto Taichi <taichino@gmail.com> | 2013-03-04 22:06:17 -0500 |
---|---|---|
committer | Matsumoto Taichi <taichino@gmail.com> | 2013-03-04 22:06:17 -0500 |
commit | acc137671e97ef12b5929af69e90d734daa92fc3 (patch) | |
tree | 4f116481fa845e40c726f03291c0b051b45c06f6 | |
parent | bcfc503310e513334468c690bb55b79f5947b2b5 (diff) | |
download | croniter-acc137671e97ef12b5929af69e90d734daa92fc3.tar.gz |
- Fixed bug: https://github.com/taichino/croniter/issues/20
- Added test case for the case above
-rw-r--r-- | croniter/croniter.py | 28 | ||||
-rw-r--r-- | croniter/croniter_test.py | 29 |
2 files changed, 42 insertions, 15 deletions
diff --git a/croniter/croniter.py b/croniter/croniter.py index 6f52cec..5cee8ad 100644 --- a/croniter/croniter.py +++ b/croniter/croniter.py @@ -249,20 +249,12 @@ class croniter(object): d += relativedelta(second = 0) return False, d - if is_prev: - procs = [proc_second, - proc_minute, - proc_hour, - proc_day_of_week, - proc_day_of_month, - proc_month] - else: - procs = [proc_month, - proc_day_of_month, - proc_day_of_week, - proc_hour, - proc_minute, - proc_second] + procs = [proc_month, + proc_day_of_month, + proc_day_of_week, + proc_hour, + proc_minute, + proc_second] while abs(year - current_year) <= 1: next = False @@ -303,7 +295,13 @@ class croniter(object): for d in candidates: if d <= x: return d - x - return (candidates[0]) - x - range_val + candidate = candidates[0] + for c in candidates: + if c < range_val: + candidate = c + break + + return (candidate - x - range_val) def is_leap(self, year): if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0): diff --git a/croniter/croniter_test.py b/croniter/croniter_test.py index da04d9a..5f9b917 100644 --- a/croniter/croniter_test.py +++ b/croniter/croniter_test.py @@ -253,6 +253,35 @@ class CroniterTest(unittest.TestCase): self.assertEqual(n3.hour, base.hour + 2) self.assertEqual(n3.minute, base.minute) + def testBug3(self): + base = datetime(2013, 3, 1, 12, 17, 34, 257877) + c = croniter('00 03 16,30 * *', base) + + n1 = c.get_next(datetime) + self.assertEqual(n1.month, 3) + self.assertEqual(n1.day, 16) + + n2 = c.get_next(datetime) + self.assertEqual(n2.month, 3) + self.assertEqual(n2.day, 30) + + n3 = c.get_next(datetime) + self.assertEqual(n3.month, 4) + self.assertEqual(n3.day, 16) + + n4 = c.get_prev(datetime) + self.assertEqual(n4.month, 3) + self.assertEqual(n4.day, 30) + + n5 = c.get_prev(datetime) + self.assertEqual(n5.month, 3) + self.assertEqual(n5.day, 16) + + n6 = c.get_prev(datetime) + self.assertEqual(n6.month, 2) + self.assertEqual(n6.day, 16) + + def test_rangeGenerator(self): base = datetime(2013, 3, 4, 0, 0) itr = croniter('1-9/2 0 1 * *', base) |