diff options
author | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2016-10-30 22:23:24 +0200 |
---|---|---|
committer | Mathieu Le Marec - Pasquet <kiorky@cryptelium.net> | 2016-10-30 22:23:24 +0200 |
commit | 062fdc09de85f95cb324295d9b3a06ed34d9d3b6 (patch) | |
tree | e36e6a165ca0bcedccd2b157e6b7de865ddb3947 | |
parent | 34e8aa1f724d7e7e44e63c580f83d4c7291dcb27 (diff) | |
download | croniter-34.tar.gz |
Real fix for #3434
-rw-r--r-- | src/croniter/__init__.py | 7 | ||||
-rw-r--r-- | src/croniter/croniter.py | 33 | ||||
-rwxr-xr-x | src/croniter/tests/test_croniter.py | 9 |
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) |