modify weekday treatment

This commit is contained in:
taichino 2010-01-25 05:23:37 +09:00
parent 0d12ede4a9
commit 456aa30d2f
3 changed files with 51 additions and 8 deletions

38
croniter/__init__.py Normal file
View File

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
"""
croniter provides iteration for datetime object with cron like format.
Simple example of usage is followings
>>> from croniter import croniter
>>> from datetime import datetime
>>> base = datetime(2010, 1, 25, 4, 46)
>>> iter = croniter('*/5 * * * *', base) # every 5 minites
>>> print iter.get_next(datetime) # 2010-01-25 04:50:00
>>> print iter.get_next(datetime) # 2010-01-25 04:55:00
>>> print iter.get_next(datetime) # 2010-01-25 05:00:00
>>>
>>> iter = croniter('2 4 * * mon,fri', base) # 04:02 on every Monday and Friday
>>> print iter.get_next(datetime) # 2010-01-26 04:02:00
>>> print iter.get_next(datetime) # 2010-01-30 04:02:00
>>> print iter.get_next(datetime) # 2010-01-25 05:00:00
All you need to know is constructor and get_next, these signature are following.
>>> def __init__(self, cron_format, start_time=time.time())
croniter iterate along with 'cron_format' from 'start_time'.
cron_format is 'min hour day month day_of_week', and please refer to
http://en.wikipedia.org/wiki/Cron for details.
>>> def get_next(self, ret_type=float)
get_next return next time in iteration with 'ret_type'.
And ret_type accept only 'float' or 'datetime'.
"""
__author__ = "Matsumoto Taichi (taichino@gmail.com)"
__version__ = "0.1.1"
__license__ = "MIT License"
from croniter import croniter

View File

@ -69,7 +69,7 @@ class croniter:
t = self.ALPHACONV[i][t.lower()]
if t in self.LOWMAP[i]:
t = self.LOWMAP[i][t]
if not t or (t != '*' and (int(t) < self.RANGES[i][0] or int(t) > self.RANGES[i][1])):
if t != '*' and (int(t) < self.RANGES[i][0] or int(t) > self.RANGES[i][1]):
raise ValueError("[%s] is not acceptable, out of range" % expr_format)
try:
res.append(int(t))
@ -77,7 +77,7 @@ class croniter:
res.append(t)
res.sort()
expanded.append(['*'] if (len(res) == 1 and res[0] == '*') else res)
self.expanded = expanded
self.expanded = expanded
def get_next(self, ret_type=float):
expanded = self.expanded[:]
@ -165,7 +165,12 @@ class croniter:
if __name__ == '__main__':
base = datetime(2010, 1, 25)
itr = dateiter('0 0 1 * 3', base)
itr = croniter('0 0 * * sun,mon', base)
print itr.get_next(datetime)
print itr.get_next(datetime)
base = datetime(2010, 1, 25)
itr = croniter('0 0 1 * 3', base)
n1 = itr.get_next(datetime)
n2 = itr.get_next(datetime)
print n1
@ -173,24 +178,24 @@ if __name__ == '__main__':
print "#" * 10
base = datetime(2010, 1, 25)
itr = dateiter('0 0 1 * 3', base)
itr = croniter('0 0 1 * 3', base)
n1 = itr.get_next(datetime)
n2 = itr.get_next(datetime)
base = datetime(2010, 2, 24, 12, 9)
itr = dateiter('0 0 */3 * *', base)
itr = croniter('0 0 */3 * *', base)
n1 = itr.get_next(datetime)
n2 = itr.get_next(datetime)
print n1
print n2
base = datetime(1997, 2, 27)
itr = dateiter('0 0 * * *', base)
itr = croniter('0 0 * * *', base)
n1 = itr.get_next(datetime)
n2 = itr.get_next(datetime)
print n1
print n2
base2 = datetime(2000, 2, 27)
itr2 = dateiter('0 0 * * *', base2)
itr2 = croniter('0 0 * * *', base2)
n3 = itr2.get_next(datetime)
print n3
n4 = itr2.get_next(datetime)

View File

@ -28,7 +28,7 @@ if __name__ == '__main__':
long_description = croniter.__doc__,
author = __author__,
author_email = 'taichino@gmail.com',
url = 'http://github.com/taichino/jcconv',
url = 'http://github.com/taichino/croniter',
keywords = 'datetime, iterator, cron',
license = __license__,
classifiers = ["Development Status :: 3 - Alpha",