Merge pull request #56 from kiorky/master

backport
This commit is contained in:
Mathieu Le Marec - Pasquet 2016-03-10 21:31:55 +01:00
commit 194d6f2e15
3 changed files with 21 additions and 13 deletions

View File

@ -1,12 +1,16 @@
Changelog Changelog
============== ==============
0.3.12 (unreleased) 0.3.13 (unreleased)
------------------- -------------------
- Nothing changed yet. - Nothing changed yet.
0.3.12 (2016-03-10)
-------------------
- support setting ret_type in __init__ [Brent Tubbs <brent.tubbs@gmail.com>]
0.3.11 (2016-01-13) 0.3.11 (2016-01-13)
------------------- -------------------

View File

@ -17,7 +17,7 @@ long_description = "\n\n".join(
setup( setup(
name='croniter', name='croniter',
version='0.3.12.dev0', version='0.3.13.dev0',
py_modules=['croniter', ], py_modules=['croniter', ],
description=( description=(
'croniter provides iteration for datetime ' 'croniter provides iteration for datetime '

View File

@ -52,7 +52,8 @@ class croniter(object):
bad_length = 'Exactly 5 or 6 columns has to be specified for iterator' \ bad_length = 'Exactly 5 or 6 columns has to be specified for iterator' \
'expression.' 'expression.'
def __init__(self, expr_format, start_time=None): def __init__(self, expr_format, start_time=None, ret_type=float):
self._ret_type = ret_type
if start_time is None: if start_time is None:
start_time = time() start_time = time()
@ -137,13 +138,14 @@ class croniter(object):
else res) else res)
self.expanded = expanded self.expanded = expanded
def get_next(self, ret_type=float): def get_next(self, ret_type=None):
return self._get_next(ret_type, is_prev=False) return self._get_next(ret_type or self._ret_type, is_prev=False)
def get_prev(self, ret_type=float): def get_prev(self, ret_type=None):
return self._get_next(ret_type, is_prev=True) return self._get_next(ret_type or self._ret_type, is_prev=True)
def get_current(self, ret_type=float): def get_current(self, ret_type=None):
ret_type = ret_type or self._ret_type
if ret_type == datetime.datetime: if ret_type == datetime.datetime:
return self._timestamp_to_datetime(self.cur) return self._timestamp_to_datetime(self.cur)
return self.cur return self.cur
@ -186,24 +188,26 @@ class croniter(object):
return self return self
__next__ = next = get_next __next__ = next = get_next
def all_next(self, ret_type=float): def all_next(self, ret_type=None):
'''Generator of all consecutive dates. Can be used instead of '''Generator of all consecutive dates. Can be used instead of
implicit call to __iter__, whenever non-default implicit call to __iter__, whenever non-default
'ret_type' has to be specified. 'ret_type' has to be specified.
''' '''
while True: while True:
yield self._get_next(ret_type, is_prev=False) yield self._get_next(ret_type or self._ret_type, is_prev=False)
def all_prev(self, ret_type=float): def all_prev(self, ret_type=None):
'''Generator of all previous dates.''' '''Generator of all previous dates.'''
while True: while True:
yield self._get_next(ret_type, is_prev=True) yield self._get_next(ret_type or self._ret_type, is_prev=True)
iter = all_next # alias, you can call .iter() instead of .all_next() iter = all_next # alias, you can call .iter() instead of .all_next()
def _get_next(self, ret_type=float, is_prev=False): def _get_next(self, ret_type=None, is_prev=False):
expanded = self.expanded[:] expanded = self.expanded[:]
ret_type = ret_type or self._ret_type
if ret_type not in (float, datetime.datetime): if ret_type not in (float, datetime.datetime):
raise TypeError("Invalid ret_type, only 'float' or 'datetime' " raise TypeError("Invalid ret_type, only 'float' or 'datetime' "
"is acceptable.") "is acceptable.")