Hello community,

here is the log from the commit of package python-croniter for openSUSE:Factory 
checked in at 2019-03-10 09:35:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-croniter (Old)
 and      /work/SRC/openSUSE:Factory/.python-croniter.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-croniter"

Sun Mar 10 09:35:35 2019 rev:8 rq:682472 version:0.3.27

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-croniter/python-croniter.changes  
2018-10-18 15:39:17.726095245 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-croniter.new.28833/python-croniter.changes   
    2019-03-10 09:35:35.568173117 +0100
@@ -1,0 +2,10 @@
+Thu Mar  7 13:48:40 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 0.3.27:
+  * Handle -Sun notation
+  * Handle invalid ranges correctly
+  * Pypi hygiene
+  * fix get_next while perserving the fix of get_prev
+  * Don't count previous minute if now is dynamic If the code is triggered 
from 5-asterisk based cron get_prev based on datetime.now() is expected to 
return current cron iteration and not previous execution.
+
+-------------------------------------------------------------------

Old:
----
  croniter-0.3.20.tar.gz

New:
----
  croniter-0.3.27.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-croniter.spec ++++++
--- /var/tmp/diff_new_pack.L2WXxh/_old  2019-03-10 09:35:36.100172990 +0100
+++ /var/tmp/diff_new_pack.L2WXxh/_new  2019-03-10 09:35:36.104172989 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-croniter
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,24 +18,22 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-croniter
-Version:        0.3.20
+Version:        0.3.27
 Release:        0
 Summary:        Python iterators for datetime objects with cron-like format
 License:        MIT
 Group:          Development/Languages/Python
-Url:            http://github.com/kiorky/croniter
+URL:            http://github.com/kiorky/croniter
 Source:         
https://files.pythonhosted.org/packages/source/c/croniter/croniter-%{version}.tar.gz
+BuildRequires:  %{python_module pytest >= 3.0.3}
+BuildRequires:  %{python_module python-dateutil}
+BuildRequires:  %{python_module pytz}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 BuildRequires:  unzip
-# Test requirements:
-BuildRequires:  %{python_module pytest}
-BuildRequires:  %{python_module python-dateutil}
-BuildRequires:  %{python_module pytz}
 Requires:       python-python-dateutil
 BuildArch:      noarch
-
 %python_subpackages
 
 %description
@@ -52,11 +50,11 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-%python_exec %{_bindir}/py.test src
+%pytest src
 
 %files %{python_files}
-%defattr(-,root,root,-)
-%doc README.rst docs/LICENSE
+%license docs/LICENSE
+%doc README.rst
 %{python_sitelib}/*
 
 %changelog

++++++ croniter-0.3.20.tar.gz -> croniter-0.3.27.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/PKG-INFO new/croniter-0.3.27/PKG-INFO
--- old/croniter-0.3.20/PKG-INFO        2017-11-06 22:22:31.000000000 +0100
+++ new/croniter-0.3.27/PKG-INFO        2019-01-27 18:33:40.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: croniter
-Version: 0.3.20
+Version: 0.3.27
 Summary: croniter provides iteration for datetime object with cron like format
 Home-page: http://github.com/kiorky/croniter
 Author: Matsumoto Taichi, kiorky
@@ -27,8 +27,16 @@
         
         Travis badge
         =============
-        .. image:: https://travis-ci.org/kiorky/croniter.png
-            :target: http://travis-ci.org/kiorky/croniter
+        .. image:: https://travis-ci.org/kiorky/croniter.svg?branch=master
+            :target: https://travis-ci.org/kiorky/croniter
+        
+        
+             
+        Support development
+        ====================
+        - Ethereum: ``0xa287d95530ba6dcb6cd59ee7f571c7ebd532814e``
+        - Bitcoin: ``3GH1S8j68gBceTeEG5r8EJovS3BdUBP2jR``
+        - `paypal <https://paypal.me/kiorky>`_
         
         Usage
         ============
@@ -39,26 +47,26 @@
             >>> from datetime import datetime
             >>> base = datetime(2010, 1, 25, 4, 46)
             >>> iter = croniter('*/5 * * * *', base)  # every 5 minutes
-            >>> 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
+            >>> 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-02-02 04:02:00
+            >>> 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-02-02 04:02:00
             >>>
             >>> iter = croniter('2 4 1 * wed', base)  # 04:02 on every 
Wednesday OR on 1st day of month
-            >>> print iter.get_next(datetime)   # 2010-01-27 04:02:00
-            >>> print iter.get_next(datetime)   # 2010-02-01 04:02:00
-            >>> print iter.get_next(datetime)   # 2010-02-03 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-01-27 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-02-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-02-03 04:02:00
             >>>
             >>> iter = croniter('2 4 1 * wed', base, day_or=False)  # 04:02 on 
every 1st day of the month if it is a Wednesday
-            >>> print iter.get_next(datetime)   # 2010-09-01 04:02:00
-            >>> print iter.get_next(datetime)   # 2010-12-01 04:02:00
-            >>> print iter.get_next(datetime)   # 2011-06-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-09-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-12-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2011-06-01 04:02:00
             >>> iter = croniter('0 0 * * sat#1,sun#2', base)
-            >>> print iter.get_next(datetime)   # datetime.datetime(2010, 2, 
6, 0, 0)
+            >>> print(iter.get_next(datetime))   # datetime.datetime(2010, 2, 
6, 0, 0)
         
         All you need to know is how to use the constructor and the ``get_next``
         method, the signature of these methods are listed below::
@@ -86,9 +94,9 @@
         
             >>> base = datetime(2010, 8, 25)
             >>> itr = croniter('0 0 1 * *', base)
-            >>> print itr.get_prev(datetime)  # 2010-08-01 00:00:00
-            >>> print itr.get_prev(datetime)  # 2010-07-01 00:00:00
-            >>> print itr.get_prev(datetime)  # 2010-06-01 00:00:00
+            >>> print(itr.get_prev(datetime))  # 2010-08-01 00:00:00
+            >>> print(itr.get_prev(datetime))  # 2010-07-01 00:00:00
+            >>> print(itr.get_prev(datetime))  # 2010-06-01 00:00:00
         
         You can validate your crons using ``is_valid`` class method. (>= 
0.3.18)::
         
@@ -145,10 +153,49 @@
             - yuzawa-san
         
         
-        
         Changelog
         ==============
         
+        0.3.27 (2019-01-27)
+        -------------------
+        - Handle -Sun notation, This fixes `#119 
<https://github.com/taichino/croniter/issues/119>`_.
+          [kiorky]
+        - Handle invalid ranges correctly,  This fixes `#114 
<https://github.com/taichino/croniter/issues/114>`_.
+          [kiorky]
+        
+        0.3.26 (2018-11-03)
+        -------------------
+        
+        - Support
+        
+        
+        0.3.25 (2018-08-07)
+        -------------------
+        - Pypi hygiene
+          [hugovk]
+        
+        
+        0.3.24 (2018-06-20)
+        -------------------
+        - fix `#107 <https://github.com/taichino/croniter/issues/107>`_: 
microsecond threshold
+          [kiorky]
+        
+        
+        0.3.23 (2018-05-23)
+        -------------------
+        
+        - fix `get_next` while perserving the fix of `get_prev` in 7661c2aaa
+          [Avikam Agur <[email protected]>]
+        
+        
+        0.3.22 (2018-05-16)
+        -------------------
+        - Don't count previous minute if now is dynamic
+          If the code is triggered from 5-asterisk based cron
+          `get_prev` based on `datetime.now()` is expected to return
+          current cron iteration and not previous execution.
+          [Igor Khrol <[email protected]>]
+        
         0.3.20 (2017-11-06)
         -------------------
         
@@ -286,5 +333,10 @@
 Classifier: Operating System :: POSIX
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.6
+Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/README.rst 
new/croniter-0.3.27/README.rst
--- old/croniter-0.3.20/README.rst      2017-11-06 22:22:31.000000000 +0100
+++ new/croniter-0.3.27/README.rst      2019-01-27 18:33:40.000000000 +0100
@@ -19,8 +19,16 @@
 
 Travis badge
 =============
-.. image:: https://travis-ci.org/kiorky/croniter.png
-    :target: http://travis-ci.org/kiorky/croniter
+.. image:: https://travis-ci.org/kiorky/croniter.svg?branch=master
+    :target: https://travis-ci.org/kiorky/croniter
+
+
+     
+Support development
+====================
+- Ethereum: ``0xa287d95530ba6dcb6cd59ee7f571c7ebd532814e``
+- Bitcoin: ``3GH1S8j68gBceTeEG5r8EJovS3BdUBP2jR``
+- `paypal <https://paypal.me/kiorky>`_
 
 Usage
 ============
@@ -31,26 +39,26 @@
     >>> from datetime import datetime
     >>> base = datetime(2010, 1, 25, 4, 46)
     >>> iter = croniter('*/5 * * * *', base)  # every 5 minutes
-    >>> 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
+    >>> 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-02-02 04:02:00
+    >>> 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-02-02 04:02:00
     >>>
     >>> iter = croniter('2 4 1 * wed', base)  # 04:02 on every Wednesday OR on 
1st day of month
-    >>> print iter.get_next(datetime)   # 2010-01-27 04:02:00
-    >>> print iter.get_next(datetime)   # 2010-02-01 04:02:00
-    >>> print iter.get_next(datetime)   # 2010-02-03 04:02:00
+    >>> print(iter.get_next(datetime))   # 2010-01-27 04:02:00
+    >>> print(iter.get_next(datetime))   # 2010-02-01 04:02:00
+    >>> print(iter.get_next(datetime))   # 2010-02-03 04:02:00
     >>>
     >>> iter = croniter('2 4 1 * wed', base, day_or=False)  # 04:02 on every 
1st day of the month if it is a Wednesday
-    >>> print iter.get_next(datetime)   # 2010-09-01 04:02:00
-    >>> print iter.get_next(datetime)   # 2010-12-01 04:02:00
-    >>> print iter.get_next(datetime)   # 2011-06-01 04:02:00
+    >>> print(iter.get_next(datetime))   # 2010-09-01 04:02:00
+    >>> print(iter.get_next(datetime))   # 2010-12-01 04:02:00
+    >>> print(iter.get_next(datetime))   # 2011-06-01 04:02:00
     >>> iter = croniter('0 0 * * sat#1,sun#2', base)
-    >>> print iter.get_next(datetime)   # datetime.datetime(2010, 2, 6, 0, 0)
+    >>> print(iter.get_next(datetime))   # datetime.datetime(2010, 2, 6, 0, 0)
 
 All you need to know is how to use the constructor and the ``get_next``
 method, the signature of these methods are listed below::
@@ -78,9 +86,9 @@
 
     >>> base = datetime(2010, 8, 25)
     >>> itr = croniter('0 0 1 * *', base)
-    >>> print itr.get_prev(datetime)  # 2010-08-01 00:00:00
-    >>> print itr.get_prev(datetime)  # 2010-07-01 00:00:00
-    >>> print itr.get_prev(datetime)  # 2010-06-01 00:00:00
+    >>> print(itr.get_prev(datetime))  # 2010-08-01 00:00:00
+    >>> print(itr.get_prev(datetime))  # 2010-07-01 00:00:00
+    >>> print(itr.get_prev(datetime))  # 2010-06-01 00:00:00
 
 You can validate your crons using ``is_valid`` class method. (>= 0.3.18)::
 
@@ -135,4 +143,3 @@
     - chris-baynes
     - ipartola
     - yuzawa-san
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/docs/CHANGES.rst 
new/croniter-0.3.27/docs/CHANGES.rst
--- old/croniter-0.3.20/docs/CHANGES.rst        2017-11-06 22:22:31.000000000 
+0100
+++ new/croniter-0.3.27/docs/CHANGES.rst        2019-01-27 18:33:40.000000000 
+0100
@@ -1,6 +1,46 @@
 Changelog
 ==============
 
+0.3.27 (2019-01-27)
+-------------------
+- Handle -Sun notation, This fixes `#119 
<https://github.com/taichino/croniter/issues/119>`_.
+  [kiorky]
+- Handle invalid ranges correctly,  This fixes `#114 
<https://github.com/taichino/croniter/issues/114>`_.
+  [kiorky]
+
+0.3.26 (2018-11-03)
+-------------------
+
+- Support
+
+
+0.3.25 (2018-08-07)
+-------------------
+- Pypi hygiene
+  [hugovk]
+
+
+0.3.24 (2018-06-20)
+-------------------
+- fix `#107 <https://github.com/taichino/croniter/issues/107>`_: microsecond 
threshold
+  [kiorky]
+
+
+0.3.23 (2018-05-23)
+-------------------
+
+- fix `get_next` while perserving the fix of `get_prev` in 7661c2aaa
+  [Avikam Agur <[email protected]>]
+
+
+0.3.22 (2018-05-16)
+-------------------
+- Don't count previous minute if now is dynamic
+  If the code is triggered from 5-asterisk based cron
+  `get_prev` based on `datetime.now()` is expected to return
+  current cron iteration and not previous execution.
+  [Igor Khrol <[email protected]>]
+
 0.3.20 (2017-11-06)
 -------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/setup.cfg 
new/croniter-0.3.27/setup.cfg
--- old/croniter-0.3.20/setup.cfg       2017-11-06 22:22:31.000000000 +0100
+++ new/croniter-0.3.27/setup.cfg       2019-01-27 18:33:40.000000000 +0100
@@ -19,5 +19,4 @@
 [egg_info]
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/setup.py new/croniter-0.3.27/setup.py
--- old/croniter-0.3.20/setup.py        2017-11-06 22:22:31.000000000 +0100
+++ new/croniter-0.3.27/setup.py        2019-01-27 18:33:40.000000000 +0100
@@ -23,7 +23,7 @@
 
 setup(
     name='croniter',
-    version='0.3.20',
+    version='0.3.27',
     py_modules=['croniter', ],
     description=(
         'croniter provides iteration for datetime '
@@ -36,6 +36,7 @@
     keywords='datetime, iterator, cron',
     install_requires=install_requires,
     license="MIT License",
+    python_requires='>=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
     classifiers=[
         "Development Status :: 4 - Beta",
         "Intended Audience :: Developers",
@@ -43,7 +44,11 @@
         "Operating System :: POSIX",
         "Programming Language :: Python",
         "Programming Language :: Python :: 2",
+        "Programming Language :: Python :: 2.6",
+        "Programming Language :: Python :: 2.7",
         "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.4",
+        "Programming Language :: Python :: 3.5",
         "Topic :: Software Development :: Libraries :: Python Modules"],
     packages=find_packages('src'),
     package_dir={'': 'src'},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/src/croniter/croniter.py 
new/croniter-0.3.27/src/croniter/croniter.py
--- old/croniter-0.3.20/src/croniter/croniter.py        2017-11-06 
22:22:31.000000000 +0100
+++ new/croniter-0.3.27/src/croniter/croniter.py        2019-01-27 
18:33:40.000000000 +0100
@@ -80,6 +80,9 @@
         self.tzinfo = None
         if isinstance(start_time, datetime.datetime):
             self.tzinfo = start_time.tzinfo
+            # milliseconds/microseconds rounds
+            if start_time.microsecond:
+                start_time = start_time + relativedelta(seconds=1)
             start_time = self._datetime_to_timestamp(start_time)
 
         self.start_time = start_time
@@ -223,11 +226,12 @@
         if is_prev:
             nearest_diff_method = self._get_prev_nearest_diff
             sign = -1
+            offset = (len(expanded) == 6 or now % 60 > 0) and 1 or 60
         else:
             nearest_diff_method = self._get_next_nearest_diff
             sign = 1
+            offset = (len(expanded) == 6) and 1 or 60
 
-        offset = len(expanded) == 6 and 1 or 60
         dst = now = self._timestamp_to_datetime(now + sign * offset)
 
         month, year = dst.month, dst.year
@@ -503,11 +507,19 @@
                         not low or not high or int(low) > int(high)
                         or not only_int_re.search(str(step))
                     ):
-                        raise CroniterBadDateError(
-                            "[{0}] is not acceptable".format(expr_format))
+                        if i == 4 and high == '0':
+                            # handle -Sun notation -> 7
+                            high = '7'
+                        else:
+                            raise CroniterBadDateError(
+                                "[{0}] is not acceptable".format(expr_format))
 
                     low, high, step = map(int, [low, high, step])
-                    rng = range(low, high + 1, step)
+                    try:
+                        rng = range(low, high + 1, step)
+                    except ValueError as exc:
+                        raise CroniterBadCronError(
+                            'invalid range: {0}'.format(exc))
                     e_list += (["{0}#{1}".format(item, nth) for item in rng]
                         if i == 4 and nth else rng)
                 else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/src/croniter/tests/test_croniter.py 
new/croniter-0.3.27/src/croniter/tests/test_croniter.py
--- old/croniter-0.3.20/src/croniter/tests/test_croniter.py     2017-11-06 
22:22:31.000000000 +0100
+++ new/croniter-0.3.27/src/croniter/tests/test_croniter.py     2019-01-27 
18:33:40.000000000 +0100
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 
 import unittest
-from datetime import datetime
+from datetime import datetime, timedelta
 from time import sleep
 import pytz
 from croniter import croniter, CroniterBadDateError, CroniterBadCronError, 
CroniterNotAlphaError
@@ -790,5 +790,117 @@
         self.assertFalse(croniter.is_valid('0 * *'))
         self.assertFalse(croniter.is_valid('* * * janu-jun *'))
 
+    def test_exactly_the_same_minute(self):
+        base = datetime(2018, 3, 5, 12, 30, 50)
+        itr = croniter('30 7,12,17 * * *', base)
+        n1 = itr.get_prev(datetime)
+        self.assertEqual(12, n1.hour)
+
+        n2 = itr.get_prev(datetime)
+        self.assertEqual(7, n2.hour)
+
+        n3 = itr.get_next(datetime)
+        self.assertEqual(12, n3.hour)
+
+    def test_next_when_now_satisfies_cron(self):
+        ts_a = datetime(2018, 5, 21, 0, 3, 0)
+        ts_b = datetime(2018, 5, 21, 0, 4, 20)
+        test_cron = '4 * * * *'
+
+        next_a = croniter(test_cron, start_time=ts_a).get_next()
+        next_b = croniter(test_cron, start_time=ts_b).get_next()
+
+        self.assertTrue(next_b > next_a)
+
+    def test_milliseconds(self):
+        """
+        https://github.com/taichino/croniter/issues/107
+        """
+        #
+        dt = datetime(2018, 1, 2, 10, 0, 0, 500)
+        c = croniter("0 10 * * * ", start_time=dt)
+        ts = "{0}".format(datetime.utcfromtimestamp(c.get_prev()))
+        self.assertEqual(ts, '2018-01-02 10:00:00')
+        #
+        dt = datetime(2018, 1, 2, 10, 0, 1, 0)
+        c = croniter("0 10 * * * ", start_time=dt)
+        ts = "{0}".format(datetime.utcfromtimestamp(c.get_prev()))
+        self.assertEqual(ts, '2018-01-02 10:00:00')
+        #
+        dt = datetime(2018, 1, 2, 9, 59, 59, 999999)
+        c = croniter("0 10 * * * ", start_time=dt)
+        ts = "{0}".format(datetime.utcfromtimestamp(c.get_prev()))
+        self.assertEqual(ts, '2018-01-01 10:00:00')
+
+    def test_invalid_zerorepeat(self):
+        self.assertFalse(croniter.is_valid('*/0 * * * *'))
+
+    def test_weekday_range(self):
+        ret = []
+        # jan 14 is monday
+        dt = datetime(2019, 1, 14, 0, 0, 0, 0)
+        for i in range(10):
+            c = croniter("0 0 * * 2-4 *", start_time=dt)
+            dt = datetime.utcfromtimestamp(c.get_next())
+            ret.append(dt)
+            dt += timedelta(days=1)
+        sret = ["{0}".format(r) for r in ret]
+        self.assertEquals(
+            sret,
+            ['2019-01-15 00:00:00',
+             '2019-01-16 00:00:01',
+             '2019-01-17 00:00:02',
+             '2019-01-22 00:00:00',
+             '2019-01-23 00:00:01',
+             '2019-01-24 00:00:02',
+             '2019-01-29 00:00:00',
+             '2019-01-30 00:00:01',
+             '2019-01-31 00:00:02',
+             '2019-02-05 00:00:00'])
+        ret = []
+        dt = datetime(2019, 1, 14, 0, 0, 0, 0)
+        for i in range(10):
+            c = croniter("0 0 * * 1-7 *", start_time=dt)
+            dt = datetime.utcfromtimestamp(c.get_next())
+            ret.append(dt)
+            dt += timedelta(days=1)
+        sret = ["{0}".format(r) for r in ret]
+        self.assertEquals(
+            sret,
+            ['2019-01-14 00:00:01',
+             '2019-01-15 00:00:02',
+             '2019-01-16 00:00:03',
+             '2019-01-17 00:00:04',
+             '2019-01-18 00:00:05',
+             '2019-01-19 00:00:06',
+             '2019-01-20 00:00:07',
+             '2019-01-21 00:00:08',
+             '2019-01-22 00:00:09',
+             '2019-01-23 00:00:10'])
+
+    def test_issue_monsun_117(self):
+        ret = []
+        dt = datetime(2019, 1, 14, 0, 0, 0, 0)
+        for i in range(10):
+            # c = croniter("0 0 * * Mon-Sun *", start_time=dt)
+            c = croniter("0 0 * * Wed-Sun *", start_time=dt)
+            dt = datetime.utcfromtimestamp(c.get_next())
+            ret.append(dt)
+            dt += timedelta(days=1)
+        sret = ["{0}".format(r) for r in ret]
+        self.assertEquals(
+            sret,
+            ['2019-01-16 00:00:00',
+             '2019-01-17 00:00:01',
+             '2019-01-18 00:00:02',
+             '2019-01-19 00:00:03',
+             '2019-01-20 00:00:04',
+             '2019-01-23 00:00:00',
+             '2019-01-24 00:00:01',
+             '2019-01-25 00:00:02',
+             '2019-01-26 00:00:03',
+             '2019-01-27 00:00:04'])
+
+
 if __name__ == '__main__':
     unittest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/croniter-0.3.20/src/croniter.egg-info/PKG-INFO 
new/croniter-0.3.27/src/croniter.egg-info/PKG-INFO
--- old/croniter-0.3.20/src/croniter.egg-info/PKG-INFO  2017-11-06 
22:22:31.000000000 +0100
+++ new/croniter-0.3.27/src/croniter.egg-info/PKG-INFO  2019-01-27 
18:33:40.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.1
+Metadata-Version: 1.2
 Name: croniter
-Version: 0.3.20
+Version: 0.3.27
 Summary: croniter provides iteration for datetime object with cron like format
 Home-page: http://github.com/kiorky/croniter
 Author: Matsumoto Taichi, kiorky
@@ -27,8 +27,16 @@
         
         Travis badge
         =============
-        .. image:: https://travis-ci.org/kiorky/croniter.png
-            :target: http://travis-ci.org/kiorky/croniter
+        .. image:: https://travis-ci.org/kiorky/croniter.svg?branch=master
+            :target: https://travis-ci.org/kiorky/croniter
+        
+        
+             
+        Support development
+        ====================
+        - Ethereum: ``0xa287d95530ba6dcb6cd59ee7f571c7ebd532814e``
+        - Bitcoin: ``3GH1S8j68gBceTeEG5r8EJovS3BdUBP2jR``
+        - `paypal <https://paypal.me/kiorky>`_
         
         Usage
         ============
@@ -39,26 +47,26 @@
             >>> from datetime import datetime
             >>> base = datetime(2010, 1, 25, 4, 46)
             >>> iter = croniter('*/5 * * * *', base)  # every 5 minutes
-            >>> 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
+            >>> 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-02-02 04:02:00
+            >>> 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-02-02 04:02:00
             >>>
             >>> iter = croniter('2 4 1 * wed', base)  # 04:02 on every 
Wednesday OR on 1st day of month
-            >>> print iter.get_next(datetime)   # 2010-01-27 04:02:00
-            >>> print iter.get_next(datetime)   # 2010-02-01 04:02:00
-            >>> print iter.get_next(datetime)   # 2010-02-03 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-01-27 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-02-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-02-03 04:02:00
             >>>
             >>> iter = croniter('2 4 1 * wed', base, day_or=False)  # 04:02 on 
every 1st day of the month if it is a Wednesday
-            >>> print iter.get_next(datetime)   # 2010-09-01 04:02:00
-            >>> print iter.get_next(datetime)   # 2010-12-01 04:02:00
-            >>> print iter.get_next(datetime)   # 2011-06-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-09-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2010-12-01 04:02:00
+            >>> print(iter.get_next(datetime))   # 2011-06-01 04:02:00
             >>> iter = croniter('0 0 * * sat#1,sun#2', base)
-            >>> print iter.get_next(datetime)   # datetime.datetime(2010, 2, 
6, 0, 0)
+            >>> print(iter.get_next(datetime))   # datetime.datetime(2010, 2, 
6, 0, 0)
         
         All you need to know is how to use the constructor and the ``get_next``
         method, the signature of these methods are listed below::
@@ -86,9 +94,9 @@
         
             >>> base = datetime(2010, 8, 25)
             >>> itr = croniter('0 0 1 * *', base)
-            >>> print itr.get_prev(datetime)  # 2010-08-01 00:00:00
-            >>> print itr.get_prev(datetime)  # 2010-07-01 00:00:00
-            >>> print itr.get_prev(datetime)  # 2010-06-01 00:00:00
+            >>> print(itr.get_prev(datetime))  # 2010-08-01 00:00:00
+            >>> print(itr.get_prev(datetime))  # 2010-07-01 00:00:00
+            >>> print(itr.get_prev(datetime))  # 2010-06-01 00:00:00
         
         You can validate your crons using ``is_valid`` class method. (>= 
0.3.18)::
         
@@ -145,10 +153,49 @@
             - yuzawa-san
         
         
-        
         Changelog
         ==============
         
+        0.3.27 (2019-01-27)
+        -------------------
+        - Handle -Sun notation, This fixes `#119 
<https://github.com/taichino/croniter/issues/119>`_.
+          [kiorky]
+        - Handle invalid ranges correctly,  This fixes `#114 
<https://github.com/taichino/croniter/issues/114>`_.
+          [kiorky]
+        
+        0.3.26 (2018-11-03)
+        -------------------
+        
+        - Support
+        
+        
+        0.3.25 (2018-08-07)
+        -------------------
+        - Pypi hygiene
+          [hugovk]
+        
+        
+        0.3.24 (2018-06-20)
+        -------------------
+        - fix `#107 <https://github.com/taichino/croniter/issues/107>`_: 
microsecond threshold
+          [kiorky]
+        
+        
+        0.3.23 (2018-05-23)
+        -------------------
+        
+        - fix `get_next` while perserving the fix of `get_prev` in 7661c2aaa
+          [Avikam Agur <[email protected]>]
+        
+        
+        0.3.22 (2018-05-16)
+        -------------------
+        - Don't count previous minute if now is dynamic
+          If the code is triggered from 5-asterisk based cron
+          `get_prev` based on `datetime.now()` is expected to return
+          current cron iteration and not previous execution.
+          [Igor Khrol <[email protected]>]
+        
         0.3.20 (2017-11-06)
         -------------------
         
@@ -286,5 +333,10 @@
 Classifier: Operating System :: POSIX
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 2
+Classifier: Programming Language :: Python :: 2.6
+Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3.4
+Classifier: Programming Language :: Python :: 3.5
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Requires-Python: >=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*


Reply via email to