summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2016-10-30 22:23:24 +0200
committerMathieu Le Marec - Pasquet <kiorky@cryptelium.net>2016-10-30 22:23:24 +0200
commit062fdc09de85f95cb324295d9b3a06ed34d9d3b6 (patch)
treee36e6a165ca0bcedccd2b157e6b7de865ddb3947
parent34e8aa1f724d7e7e44e63c580f83d4c7291dcb27 (diff)
downloadcroniter-34.tar.gz
Real fix for #3434
-rw-r--r--src/croniter/__init__.py7
-rw-r--r--src/croniter/croniter.py33
-rwxr-xr-xsrc/croniter/tests/test_croniter.py9
3 files changed, 30 insertions, 19 deletions
diff --git a/src/croniter/__init__.py b/src/croniter/__init__.py
index 02be3ab..ead8bb8 100644
--- a/src/croniter/__init__.py
+++ b/src/croniter/__init__.py
@@ -1,4 +1,9 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
-from .croniter import croniter
+from .croniter import (
+ croniter,
+ CroniterBadDateError, # noqa
+ CroniterBadCronError, # noqa
+ CroniterNotAlphaError # noqa
+) # noqa
croniter.__name__ # make flake8 happy
diff --git a/src/croniter/croniter.py b/src/croniter/croniter.py
index 581c868..aa8783d 100644
--- a/src/croniter/croniter.py
+++ b/src/croniter/croniter.py
@@ -14,7 +14,17 @@ only_int_re = re.compile(r'^\d+$')
any_int_re = re.compile(r'^\d+')
star_or_int_re = re.compile(r'^(\d+|\*)$')
-__all__ = ('croniter',)
+
+class CroniterBadCronError(ValueError):
+ '''.'''
+
+
+class CroniterBadDateError(ValueError):
+ '''.'''
+
+
+class CroniterNotAlphaError(ValueError):
+ '''.'''
class croniter(object):
@@ -67,7 +77,7 @@ class croniter(object):
self.exprs = expr_format.split()
if len(self.exprs) != 5 and len(self.exprs) != 6:
- raise ValueError(self.bad_length)
+ raise CroniterBadCronError(self.bad_length)
expanded = []
@@ -102,7 +112,7 @@ class croniter(object):
not low or not high or int(low) > int(high)
or not only_int_re.search(str(step))
):
- raise ValueError(
+ raise CroniterBadDateError(
"[{0}] is not acceptable".format(expr_format))
low, high, step = map(int, [low, high, step])
@@ -118,7 +128,7 @@ class croniter(object):
# e_list.append(j)
else:
if t.startswith('-'):
- raise ValueError(
+ raise CroniterBadCronError(
"[{0}] is not acceptable, negative numbers not allowed".format(
expr_format))
if not star_or_int_re.search(t):
@@ -137,7 +147,7 @@ class croniter(object):
and (int(t) < self.RANGES[i][0] or
int(t) > self.RANGES[i][1])
):
- raise ValueError(
+ raise CroniterBadCronError(
"[{0}] is not acceptable, out of range".format(
expr_format))
@@ -153,7 +163,7 @@ class croniter(object):
try:
return self.ALPHACONV[index][key.lower()]
except KeyError:
- raise ValueError(
+ raise CroniterNotAlphaError(
"[{0}] is not acceptable".format(" ".join(self.exprs)))
def get_next(self, ret_type=None):
@@ -382,8 +392,8 @@ class croniter(object):
return self._datetime_to_timestamp(dst.replace(microsecond=0))
if is_prev:
- raise Exception("failed to find prev date")
- raise Exception("failed to find next date")
+ raise CroniterBadDateError("failed to find prev date")
+ raise CroniterBadDateError("failed to find next date")
def _get_next_nearest(self, x, to_check):
small = [item for item in to_check if item < x]
@@ -430,10 +440,3 @@ class croniter(object):
return True
else:
return False
-
-if __name__ == '__main__':
-
- base = datetime.datetime(2010, 1, 25)
- itr = croniter('0 0 1 * *', base)
- n1 = itr.get_next(datetime.datetime)
- print(n1)
diff --git a/src/croniter/tests/test_croniter.py b/src/croniter/tests/test_croniter.py
index dfb00b2..b2b5f7d 100755
--- a/src/croniter/tests/test_croniter.py
+++ b/src/croniter/tests/test_croniter.py
@@ -5,8 +5,7 @@ import unittest
from datetime import datetime
from time import sleep
import pytz
-from croniter import croniter
-
+from croniter import croniter, CroniterBadDateError
from croniter.tests import base
@@ -393,7 +392,11 @@ class CroniterTest(base.TestCase):
def test_bug34(self):
base = datetime(2012, 2, 24, 0, 0, 0)
itr = croniter('* * 31 2 *', base)
- n1 = itr.get_next(datetime)
+ try:
+ itr.get_next(datetime)
+ except CroniterBadDateError, ex:
+ self.assertEqual(ex.message,
+ 'failed to find next date')
def testBug57(self):
base = datetime(2012, 2, 24, 0, 0, 0)