From 456aa30d2f8ab4818895054366d3018e54c874a6 Mon Sep 17 00:00:00 2001 From: taichino Date: Mon, 25 Jan 2010 05:23:37 +0900 Subject: [PATCH] modify weekday treatment --- croniter/__init__.py | 38 ++++++++++++++++++++++++++++++++++++++ croniter/croniter.py | 19 ++++++++++++------- setup.py | 2 +- 3 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 croniter/__init__.py diff --git a/croniter/__init__.py b/croniter/__init__.py new file mode 100644 index 0000000..40cc40b --- /dev/null +++ b/croniter/__init__.py @@ -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 diff --git a/croniter/croniter.py b/croniter/croniter.py index d1270a0..b113397 100644 --- a/croniter/croniter.py +++ b/croniter/croniter.py @@ -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) diff --git a/setup.py b/setup.py index c6d09ad..ee93cfb 100644 --- a/setup.py +++ b/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",