Hello community,
here is the log from the commit of package python-croniter for openSUSE:Factory
checked in at 2020-06-10 00:47:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-croniter (Old)
and /work/SRC/openSUSE:Factory/.python-croniter.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-croniter"
Wed Jun 10 00:47:20 2020 rev:12 rq:812619 version:0.3.32
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-croniter/python-croniter.changes
2020-03-16 10:19:16.251610026 +0100
+++
/work/SRC/openSUSE:Factory/.python-croniter.new.3606/python-croniter.changes
2020-06-10 00:47:28.638797561 +0200
@@ -1,0 +2,9 @@
+Mon Jun 8 13:31:08 UTC 2020 - Dirk Mueller <[email protected]>
+
+- update to 0.3.32:
+ - document seconds repeats, fixes #122
+ - Implement match method, fixes #54
+ - Adding tests for #127 (test more DSTs and croniter behavior around)
+ - Changed lag_hours comparison to absolute to manage dst boundary when
getting previous
+
+-------------------------------------------------------------------
Old:
----
croniter-0.3.31.tar.gz
New:
----
croniter-0.3.32.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-croniter.spec ++++++
--- /var/tmp/diff_new_pack.CjGJdd/_old 2020-06-10 00:47:29.286799295 +0200
+++ /var/tmp/diff_new_pack.CjGJdd/_new 2020-06-10 00:47:29.290799306 +0200
@@ -18,20 +18,23 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-croniter
-Version: 0.3.31
+Version: 0.3.32
Release: 0
Summary: Python iterators for datetime objects with cron-like format
License: MIT
Group: Development/Languages/Python
URL: http://github.com/kiorky/croniter
Source:
https://files.pythonhosted.org/packages/source/c/croniter/croniter-%{version}.tar.gz
+BuildRequires: %{python_module natsort}
BuildRequires: %{python_module pytest >= 3.0.3}
BuildRequires: %{python_module python-dateutil}
BuildRequires: %{python_module pytz}
BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module tzlocal}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
BuildRequires: unzip
+Requires: python-natsort
Requires: python-python-dateutil
BuildArch: noarch
%python_subpackages
++++++ croniter-0.3.31.tar.gz -> croniter-0.3.32.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/PKG-INFO new/croniter-0.3.32/PKG-INFO
--- old/croniter-0.3.31/PKG-INFO 2020-01-02 16:22:28.000000000 +0100
+++ new/croniter-0.3.32/PKG-INFO 2020-05-27 18:01:44.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: croniter
-Version: 0.3.31
+Version: 0.3.32
Summary: croniter provides iteration for datetime object with cron like format
Home-page: http://github.com/kiorky/croniter
Author: Matsumoto Taichi, kiorky
@@ -103,6 +103,30 @@
>>> local_date = tz.localize(datetime(2017, 3, 26))
>>> val = croniter('0 0 * * *', local_date).get_next(datetime)
+ About second repeats
+ =====================
+ Croniter is able to do second repeatition crontabs form::
+
+ >>> croniter('* * * * * 1', local_date).get_next(datetime)
+ >>> base = datetime(2012, 4, 6, 13, 26, 10)
+ >>> itr = croniter('* * * * * 15,25', base)
+ >>> itr.get_next(datetime) # 4/6 13:26:15
+ >>> itr.get_next(datetime) # 4/6 13:26:25
+ >>> itr.get_next(datetime) # 4/6 13:27:15
+
+ You can also note that this expression will repeat every second from
the start datetime.
+
+ >>> croniter('* * * * * *', local_date).get_next(datetime)
+
+ Testing if a date matchs a crontab
+ ==================================
+ As simple as::
+
+ >>> croniter.match("0 0 * * *", datetime(2019, 1, 14, 0, 0, 0, 0))
+ True
+ >>> croniter.match("0 0 * * *", datetime(2019, 1, 14, 0, 2, 0, 0))
+ False
+
Develop this package
====================
@@ -149,19 +173,31 @@
Changelog
==============
+ 0.3.32 (2020-05-27)
+ -------------------
+
+ - document seconds repeats, fixes #122
+ [kiorky]
+ - Implement match method, fixes #54
+ [kiorky]
+ - Adding tests for #127 (test more DSTs and croniter behavior around)
+ [kiorky]
+ - Changed lag_hours comparison to absolute to manage dst boundary when
getting previous
+ [Sokkka]
+
0.3.31 (2020-01-02)
-------------------
- Fix get_next() when start_time less then 1s before next instant
[AlexHill]
+
0.3.30 (2019-04-20)
-------------------
- credits
-
0.3.29 (2019-03-26)
-------------------
@@ -341,5 +377,7 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
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.31/README.rst
new/croniter-0.3.32/README.rst
--- old/croniter-0.3.31/README.rst 2020-01-02 16:22:28.000000000 +0100
+++ new/croniter-0.3.32/README.rst 2020-05-27 18:01:43.000000000 +0200
@@ -95,6 +95,30 @@
>>> local_date = tz.localize(datetime(2017, 3, 26))
>>> val = croniter('0 0 * * *', local_date).get_next(datetime)
+About second repeats
+=====================
+Croniter is able to do second repeatition crontabs form::
+
+ >>> croniter('* * * * * 1', local_date).get_next(datetime)
+ >>> base = datetime(2012, 4, 6, 13, 26, 10)
+ >>> itr = croniter('* * * * * 15,25', base)
+ >>> itr.get_next(datetime) # 4/6 13:26:15
+ >>> itr.get_next(datetime) # 4/6 13:26:25
+ >>> itr.get_next(datetime) # 4/6 13:27:15
+
+You can also note that this expression will repeat every second from the start
datetime.
+
+ >>> croniter('* * * * * *', local_date).get_next(datetime)
+
+Testing if a date matchs a crontab
+==================================
+As simple as::
+
+ >>> croniter.match("0 0 * * *", datetime(2019, 1, 14, 0, 0, 0, 0))
+ True
+ >>> croniter.match("0 0 * * *", datetime(2019, 1, 14, 0, 2, 0, 0))
+ False
+
Develop this package
====================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/docs/CHANGES.rst
new/croniter-0.3.32/docs/CHANGES.rst
--- old/croniter-0.3.31/docs/CHANGES.rst 2020-01-02 16:22:28.000000000
+0100
+++ new/croniter-0.3.32/docs/CHANGES.rst 2020-05-27 18:01:43.000000000
+0200
@@ -1,19 +1,31 @@
Changelog
==============
+0.3.32 (2020-05-27)
+-------------------
+
+- document seconds repeats, fixes #122
+ [kiorky]
+- Implement match method, fixes #54
+ [kiorky]
+- Adding tests for #127 (test more DSTs and croniter behavior around)
+ [kiorky]
+- Changed lag_hours comparison to absolute to manage dst boundary when getting
previous
+ [Sokkka]
+
0.3.31 (2020-01-02)
-------------------
- Fix get_next() when start_time less then 1s before next instant
[AlexHill]
+
0.3.30 (2019-04-20)
-------------------
- credits
-
0.3.29 (2019-03-26)
-------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/requirements/base.txt
new/croniter-0.3.32/requirements/base.txt
--- old/croniter-0.3.31/requirements/base.txt 2020-01-02 16:22:28.000000000
+0100
+++ new/croniter-0.3.32/requirements/base.txt 2020-05-27 18:01:43.000000000
+0200
@@ -1,2 +1,3 @@
python_dateutil
+natsort
-e .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/requirements/test.txt
new/croniter-0.3.32/requirements/test.txt
--- old/croniter-0.3.31/requirements/test.txt 2020-01-02 16:22:28.000000000
+0100
+++ new/croniter-0.3.32/requirements/test.txt 2020-05-27 18:01:43.000000000
+0200
@@ -5,4 +5,5 @@
coverage>=4.2
mock>=2.0.0 # For Python 2
coveralls
-flake8
\ No newline at end of file
+flake8
+tzlocal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/setup.cfg
new/croniter-0.3.32/setup.cfg
--- old/croniter-0.3.31/setup.cfg 2020-01-02 16:22:28.000000000 +0100
+++ new/croniter-0.3.32/setup.cfg 2020-05-27 18:01:44.000000000 +0200
@@ -1,6 +1,10 @@
[bdist_wheel]
universal = 1
+[flake8]
+max-line-length = 120
+ignore = W504,W503
+
[coverage:run]
source = .
branch = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/setup.py new/croniter-0.3.32/setup.py
--- old/croniter-0.3.31/setup.py 2020-01-02 16:22:28.000000000 +0100
+++ new/croniter-0.3.32/setup.py 2020-05-27 18:01:43.000000000 +0200
@@ -23,7 +23,7 @@
setup(
name='croniter',
- version='0.3.31',
+ version='0.3.32',
py_modules=['croniter', ],
description=(
'croniter provides iteration for datetime '
@@ -49,6 +49,8 @@
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
+ "Programming Language :: Python :: 3.6",
+ "Programming Language :: Python :: 3.7",
"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.31/src/croniter/croniter.py
new/croniter-0.3.32/src/croniter/croniter.py
--- old/croniter-0.3.31/src/croniter/croniter.py 2020-01-02
16:22:28.000000000 +0100
+++ new/croniter-0.3.32/src/croniter/croniter.py 2020-05-27
18:01:43.000000000 +0200
@@ -10,6 +10,7 @@
from dateutil.relativedelta import relativedelta
from dateutil.tz import tzutc
import calendar
+import natsort
step_search_re = re.compile(r'^([^-]+)-([^-/]+)(/(.*))?$')
search_re = re.compile(r'^([^-]+)-([^-/]+)(/(.*))?$')
@@ -80,13 +81,11 @@
start_time = time()
self.tzinfo = None
- if isinstance(start_time, datetime.datetime):
- self.tzinfo = start_time.tzinfo
- start_time = self._datetime_to_timestamp(start_time)
- self.start_time = start_time
- self.dst_start_time = start_time
- self.cur = start_time
+ self.start_time = None
+ self.dst_start_time = None
+ self.cur = None
+ self.set_current(start_time)
self.expanded, self.nth_weekday_of_month = self.expand(expr_format)
@@ -98,7 +97,9 @@
raise CroniterNotAlphaError(
"[{0}] is not acceptable".format(" ".join(expressions)))
- def get_next(self, ret_type=None):
+ def get_next(self, ret_type=None, start_time=None):
+ if start_time is not None:
+ self.set_current(start_time)
return self._get_next(ret_type or self._ret_type, is_prev=False)
def get_prev(self, ret_type=None):
@@ -106,10 +107,20 @@
def get_current(self, ret_type=None):
ret_type = ret_type or self._ret_type
- if issubclass(ret_type, datetime.datetime):
+ if issubclass(ret_type, datetime.datetime):
return self._timestamp_to_datetime(self.cur)
return self.cur
+ def set_current(self, start_time):
+ if isinstance(start_time, datetime.datetime):
+ self.tzinfo = start_time.tzinfo
+ start_time = self._datetime_to_timestamp(start_time)
+
+ self.start_time = start_time
+ self.dst_start_time = start_time
+ self.cur = start_time
+ return self.cur
+
@classmethod
def _datetime_to_timestamp(cls, d):
"""
@@ -202,16 +213,17 @@
if dtresult and self.tzinfo:
dtresult_utcoffset = dtresult.utcoffset()
lag_hours = (
- self._timedelta_to_seconds(dtresult - dtstarttime) / (60*60)
+ self._timedelta_to_seconds(dtresult - dtstarttime) / (60 * 60)
)
lag = self._timedelta_to_seconds(
dtresult_utcoffset - dtstarttime_utcoffset
)
hours_before_midnight = 24 - dtstarttime.hour
if dtresult_utcoffset != dtstarttime_utcoffset:
- if ((lag > 0 and lag_hours >= hours_before_midnight)
+ if (
+ (lag > 0 and abs(lag_hours) >= hours_before_midnight)
or (lag < 0 and
- ((3600*lag_hours+abs(lag)) >= hours_before_midnight*3600))
+ ((3600 * abs(lag_hours) + abs(lag)) >=
hours_before_midnight * 3600))
):
dtresult = dtresult - datetime.timedelta(seconds=lag)
result = self._datetime_to_timestamp(dtresult)
@@ -315,7 +327,8 @@
for wday, nth in nth_weekday_of_month.items():
w = (wday + 6) % 7
c = calendar.Calendar(w).monthdayscalendar(d.year, d.month)
- if c[0][0] == 0: c.pop(0)
+ if c[0][0] == 0:
+ c.pop(0)
for n in nth:
if len(c) < n:
continue
@@ -522,19 +535,19 @@
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)
+ if i == 4 and nth else rng)
else:
if t.startswith('-'):
- raise CroniterBadCronError(
- "[{0}] is not acceptable,\
- negative numbers not allowed".format(
- expr_format))
+ raise CroniterBadCronError((
+ "[{0}] is not acceptable,"
+ "negative numbers not allowed"
+ ).format(expr_format))
if not star_or_int_re.search(t):
t = cls._alphaconv(i, t, expressions)
try:
t = int(t)
- except:
+ except ValueError:
pass
if t in cls.LOWMAP[i]:
@@ -556,7 +569,7 @@
nth_weekday_of_month[t] = set()
nth_weekday_of_month[t].add(int(nth))
- res.sort()
+ res = natsort.natsorted(res)
expanded.append(['*'] if (len(res) == 1
and res[0] == '*')
else res)
@@ -571,3 +584,11 @@
return False
else:
return True
+
+ @classmethod
+ def match(cls, cron_expression, testdate):
+ cron = cls(cron_expression, testdate, ret_type=datetime.datetime)
+ td, ms1 = cron.get_current(datetime.datetime),
relativedelta(microseconds=1)
+ cron.set_current(td + ms1)
+ tdp, tdt = cron.get_current(), cron.get_prev()
+ return (max(tdp, tdt) - min(tdp, tdt)).total_seconds() < 60
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/src/croniter/tests/test_croniter.py
new/croniter-0.3.32/src/croniter/tests/test_croniter.py
--- old/croniter-0.3.31/src/croniter/tests/test_croniter.py 2020-01-02
16:22:28.000000000 +0100
+++ new/croniter-0.3.32/src/croniter/tests/test_croniter.py 2020-05-27
18:01:43.000000000 +0200
@@ -8,10 +8,22 @@
import pytz
from croniter import croniter, CroniterBadDateError, CroniterBadCronError,
CroniterNotAlphaError
from croniter.tests import base
+from tzlocal import get_localzone
class CroniterTest(base.TestCase):
+ def testSecondSec(self):
+ base = datetime(2012, 4, 6, 13, 26, 10)
+ itr = croniter('* * * * * 15,25', base)
+ n = itr.get_next(datetime)
+ self.assertEqual(15, n.second)
+ n = itr.get_next(datetime)
+ self.assertEqual(25, n.second)
+ n = itr.get_next(datetime)
+ self.assertEqual(15, n.second)
+ self.assertEqual(27, n.minute)
+
def testSecond(self):
base = datetime(2012, 4, 6, 13, 26, 10)
itr = croniter('*/1 * * * * *', base)
@@ -776,6 +788,27 @@
lret1 = ['{0}'.format(d[1]) for d in local_dates]
self.assertEqual(sret1, lret1)
+ def test_std_dst3(self):
+ """
+ DST tests
+
+ This fixes https://github.com/taichino/croniter/issues/90
+
+ Adelaide, Australia: 15/04/2020 00:00 -> 15/03/2020
+
+ """
+
+ tz = pytz.timezone('Australia/Adelaide')
+
+ schedule = croniter('0 0 24 * *', tz.localize(datetime(2020, 4,15)))
+ val1 = schedule.get_prev(datetime)
+ dt1 = tz.localize(datetime(2020, 3, 24))
+ self.assertEqual(val1, dt1)
+
+ val2 = schedule.get_next(datetime)
+ dt2 = tz.localize(datetime(2020, 4, 24))
+ self.assertEqual(val2, dt2)
+
def test_error_alpha_cron(self):
self.assertRaises(CroniterNotAlphaError, croniter.expand,
'* * * janu-jun *')
@@ -919,6 +952,78 @@
'2019-01-26 00:00:03',
'2019-01-27 00:00:04'])
+ def test_mixdow(self):
+ base = datetime(2018, 10, 1, 0, 0)
+ itr = croniter('1 1 7,14,21,L * *', base)
+ self.assertTrue(isinstance(itr.get_next(), float))
+
+ def test_match(self):
+ self.assertTrue(croniter.match(
+ "0 0 * * *",
+ datetime(2019, 1, 14, 0, 0, 0, 0)
+ ))
+ self.assertFalse(croniter.match(
+ "0 0 * * *",
+ datetime(2019, 1, 14, 0, 1, 0, 0)
+ ))
+ self.assertTrue(croniter.match(
+ "31 * * * *",
+ datetime(2019, 1, 14, 1, 31, 0, 0)
+ ))
+
+
+ def test_dst_issue90_st31ny(self):
+ tz = pytz.timezone("Europe/Paris")
+ now = datetime(2020, 3, 29, 1, 59, 55, tzinfo=tz)
+ it = croniter('1 2 * * *', now)
+ #
+ # Taking around DST @ 29/03/20 01:59
+ #
+ ret = [
+ it.get_next(datetime).isoformat(),
+ it.get_prev(datetime).isoformat(),
+ it.get_prev(datetime).isoformat(),
+ it.get_next(datetime).isoformat(),
+ it.get_next(datetime).isoformat(),
+ ]
+ self.assertEqual(ret, [
+ '2020-03-30T02:01:00+02:00',
+ '2020-03-29T01:01:00+01:00',
+ '2020-03-28T03:01:00+01:00',
+ '2020-03-29T02:01:00+02:00',
+ '2020-03-29T03:01:00+02:00'])
+ #
+ nowp = datetime(2020, 3, 28, 1, 58, 55, tzinfo=tz)
+ itp = croniter('1 2 * * *', nowp)
+ retp = [
+ itp.get_next(datetime).isoformat(),
+ itp.get_prev(datetime).isoformat(),
+ itp.get_prev(datetime).isoformat(),
+ itp.get_next(datetime).isoformat(),
+ itp.get_next(datetime).isoformat(),
+ ]
+ self.assertEqual(retp, [
+ '2020-03-29T02:01:00+02:00',
+ '2020-03-28T02:01:00+01:00',
+ '2020-03-27T02:01:00+01:00',
+ '2020-03-28T02:01:00+01:00',
+ '2020-03-29T03:01:00+02:00'])
+ #
+ nowt = datetime(2020, 3, 29, 2, 0, 0, tzinfo=tz)
+ itt = croniter('1 2 * * *', nowt)
+ rett = [
+ itt.get_next(datetime).isoformat(),
+ itt.get_prev(datetime).isoformat(),
+ itt.get_prev(datetime).isoformat(),
+ itt.get_next(datetime).isoformat(),
+ itt.get_next(datetime).isoformat(),
+ ]
+ self.assertEqual(ret, [
+ '2020-03-30T02:01:00+02:00',
+ '2020-03-29T01:01:00+01:00',
+ '2020-03-28T03:01:00+01:00',
+ '2020-03-29T02:01:00+02:00',
+ '2020-03-29T03:01:00+02:00'])
if __name__ == '__main__':
unittest.main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/src/croniter.egg-info/PKG-INFO
new/croniter-0.3.32/src/croniter.egg-info/PKG-INFO
--- old/croniter-0.3.31/src/croniter.egg-info/PKG-INFO 2020-01-02
16:22:28.000000000 +0100
+++ new/croniter-0.3.32/src/croniter.egg-info/PKG-INFO 2020-05-27
18:01:44.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 1.2
Name: croniter
-Version: 0.3.31
+Version: 0.3.32
Summary: croniter provides iteration for datetime object with cron like format
Home-page: http://github.com/kiorky/croniter
Author: Matsumoto Taichi, kiorky
@@ -103,6 +103,30 @@
>>> local_date = tz.localize(datetime(2017, 3, 26))
>>> val = croniter('0 0 * * *', local_date).get_next(datetime)
+ About second repeats
+ =====================
+ Croniter is able to do second repeatition crontabs form::
+
+ >>> croniter('* * * * * 1', local_date).get_next(datetime)
+ >>> base = datetime(2012, 4, 6, 13, 26, 10)
+ >>> itr = croniter('* * * * * 15,25', base)
+ >>> itr.get_next(datetime) # 4/6 13:26:15
+ >>> itr.get_next(datetime) # 4/6 13:26:25
+ >>> itr.get_next(datetime) # 4/6 13:27:15
+
+ You can also note that this expression will repeat every second from
the start datetime.
+
+ >>> croniter('* * * * * *', local_date).get_next(datetime)
+
+ Testing if a date matchs a crontab
+ ==================================
+ As simple as::
+
+ >>> croniter.match("0 0 * * *", datetime(2019, 1, 14, 0, 0, 0, 0))
+ True
+ >>> croniter.match("0 0 * * *", datetime(2019, 1, 14, 0, 2, 0, 0))
+ False
+
Develop this package
====================
@@ -149,19 +173,31 @@
Changelog
==============
+ 0.3.32 (2020-05-27)
+ -------------------
+
+ - document seconds repeats, fixes #122
+ [kiorky]
+ - Implement match method, fixes #54
+ [kiorky]
+ - Adding tests for #127 (test more DSTs and croniter behavior around)
+ [kiorky]
+ - Changed lag_hours comparison to absolute to manage dst boundary when
getting previous
+ [Sokkka]
+
0.3.31 (2020-01-02)
-------------------
- Fix get_next() when start_time less then 1s before next instant
[AlexHill]
+
0.3.30 (2019-04-20)
-------------------
- credits
-
0.3.29 (2019-03-26)
-------------------
@@ -341,5 +377,7 @@
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
+Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
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.31/src/croniter.egg-info/requires.txt
new/croniter-0.3.32/src/croniter.egg-info/requires.txt
--- old/croniter-0.3.31/src/croniter.egg-info/requires.txt 2020-01-02
16:22:28.000000000 +0100
+++ new/croniter-0.3.32/src/croniter.egg-info/requires.txt 2020-05-27
18:01:44.000000000 +0200
@@ -1 +1,2 @@
python_dateutil
+natsort
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/croniter-0.3.31/tox.ini new/croniter-0.3.32/tox.ini
--- old/croniter-0.3.31/tox.ini 2020-01-02 16:22:28.000000000 +0100
+++ new/croniter-0.3.32/tox.ini 2020-05-27 18:01:43.000000000 +0200
@@ -1,7 +1,7 @@
[tox]
minversion = 2.3
envlist =
- {py26,py27,py34,py35}-std
+ {py26,py27,py34,py35,py36,py37}-std
py27-coverage
skipsdist = true
@@ -14,9 +14,8 @@
COVERAGE_FILE={envdir}/coverage_report
changedir = src
commands =
- {py26,py27,py34,py35,py36}-std: py.test -v .
- {py27,py34,py35,py36}-std: flake8 src/croniter/croniter.py
+ {py26,py27,py34,py35,py36,py37}-std: py.test -v .
+ {py27,py34,py35,py36,py37}-std: flake8 croniter/croniter.py
py27-coverage: coverage erase
py27-coverage: sh -c 'cd .. && coverage run $(which py.test) -v src'
py27-coverage: coverage report
-