Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/croniter/__init__.py
Original file line number Diff line number Diff line change
@@ -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
33 changes: 18 additions & 15 deletions src/croniter/croniter.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,17 @@
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):
Expand Down Expand Up @@ -67,7 +77,7 @@ def __init__(self, expr_format, start_time=None, ret_type=float):
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 = []

Expand Down Expand Up @@ -102,7 +112,7 @@ def __init__(self, expr_format, start_time=None, ret_type=float):
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])
Expand All @@ -118,7 +128,7 @@ def __init__(self, expr_format, start_time=None, ret_type=float):
# 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):
Expand All @@ -137,7 +147,7 @@ def __init__(self, expr_format, start_time=None, ret_type=float):
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))

Expand All @@ -153,7 +163,7 @@ def _alphaconv(self, index, key):
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):
Expand Down Expand Up @@ -382,8 +392,8 @@ def proc_second(d):
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]
Expand Down Expand Up @@ -430,10 +440,3 @@ def is_leap(self, year):
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)
9 changes: 6 additions & 3 deletions src/croniter/tests/test_croniter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@
from datetime import datetime
from time import sleep
import pytz
from croniter import croniter

from croniter import croniter, CroniterBadDateError
from croniter.tests import base


Expand Down Expand Up @@ -393,7 +392,11 @@ def testBug3(self):
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)
Expand Down