modify weekday treatment
This commit is contained in:
parent
0d12ede4a9
commit
456aa30d2f
38
croniter/__init__.py
Normal file
38
croniter/__init__.py
Normal 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
|
@ -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)
|
||||
|
2
setup.py
2
setup.py
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user