summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatsumoto Taichi <taichino@gmail.com>2013-03-04 22:06:17 -0500
committerMatsumoto Taichi <taichino@gmail.com>2013-03-04 22:06:17 -0500
commitacc137671e97ef12b5929af69e90d734daa92fc3 (patch)
tree4f116481fa845e40c726f03291c0b051b45c06f6
parentbcfc503310e513334468c690bb55b79f5947b2b5 (diff)
downloadcroniter-acc137671e97ef12b5929af69e90d734daa92fc3.tar.gz
- Fixed bug: https://github.com/taichino/croniter/issues/20
- Added test case for the case above
-rw-r--r--croniter/croniter.py28
-rw-r--r--croniter/croniter_test.py29
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)