Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-croniter for openSUSE:Factory checked in at 2023-09-01 14:19:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-croniter (Old) and /work/SRC/openSUSE:Factory/.python-croniter.new.1766 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-croniter" Fri Sep 1 14:19:24 2023 rev:26 rq:1108278 version:1.4.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-croniter/python-croniter.changes 2023-06-26 18:16:57.578701143 +0200 +++ /work/SRC/openSUSE:Factory/.python-croniter.new.1766/python-croniter.changes 2023-09-01 14:19:52.365649485 +0200 @@ -1,0 +2,12 @@ +Thu Aug 31 12:04:22 UTC 2023 - Steve Kowalik <steven.kowa...@suse.com> + +- Update to 1.4.1: + * Make a retrocompatible version of 1.4.0 change about supporting + VIXIECRON bug. + * Added "implement_cron_bug" flag to make the cron parser compatible + with a bug in Vixie/ISC Cron. +- Switch to pyproject macros. +- Actually drop future requirement. +- Stop using greedy globs in %files. + +------------------------------------------------------------------- Old: ---- croniter-1.3.15.tar.gz New: ---- croniter-1.4.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-croniter.spec ++++++ --- /var/tmp/diff_new_pack.sQHwNp/_old 2023-09-01 14:19:53.321683607 +0200 +++ /var/tmp/diff_new_pack.sQHwNp/_new 2023-09-01 14:19:53.325683750 +0200 @@ -18,18 +18,19 @@ %{?sle15_python_module_pythons} Name: python-croniter -Version: 1.3.15 +Version: 1.4.1 Release: 0 Summary: Python iterators for datetime objects with cron-like format License: MIT URL: https://github.com/kiorky/croniter Source: https://files.pythonhosted.org/packages/source/c/croniter/croniter-%{version}.tar.gz -BuildRequires: %{python_module future} +BuildRequires: %{python_module pip} 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: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros BuildRequires: unzip @@ -44,10 +45,10 @@ %setup -q -n croniter-%{version} %build -%python_build +%pyproject_wheel %install -%python_install +%pyproject_install %python_expand %fdupes %{buildroot}%{$python_sitelib} %check @@ -56,6 +57,7 @@ %files %{python_files} %license LICENSE %doc README.rst -%{python_sitelib}/* +%{python_sitelib}/croniter +%{python_sitelib}/croniter-%{version}.dist-info %changelog ++++++ croniter-1.3.15.tar.gz -> croniter-1.4.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-1.3.15/CHANGELOG.rst new/croniter-1.4.1/CHANGELOG.rst --- old/croniter-1.3.15/CHANGELOG.rst 2023-05-25 15:56:30.000000000 +0200 +++ new/croniter-1.4.1/CHANGELOG.rst 2023-06-15 20:03:28.000000000 +0200 @@ -1,6 +1,21 @@ Changelog ============== +1.4.1 (2023-06-15) +------------------ + +- Make a retrocompatible version of 1.4.0 change about supporting VIXIECRON bug. (fix #47) + [kiorky] + + +1.4.0 (2023-06-15) +------------------ + +- Added "implement_cron_bug" flag to make the cron parser compatible with a bug in Vixie/ISC Cron + [kiorky, David White <dwhi...@cisco.com>] + *WARNING*: EXPAND METHOD CHANGES RETURN VALUE + + 1.3.15 (2023-05-25) ------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-1.3.15/PKG-INFO new/croniter-1.4.1/PKG-INFO --- old/croniter-1.3.15/PKG-INFO 2023-05-25 15:56:30.939684200 +0200 +++ new/croniter-1.4.1/PKG-INFO 2023-06-15 20:03:28.799223000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: croniter -Version: 1.3.15 +Version: 1.4.1 Summary: croniter provides iteration for datetime object with cron like format Home-page: http://github.com/kiorky/croniter Author: Matsumoto Taichi, kiorky @@ -323,6 +323,21 @@ Changelog ============== +1.4.1 (2023-06-15) +------------------ + +- Make a retrocompatible version of 1.4.0 change about supporting VIXIECRON bug. (fix #47) + [kiorky] + + +1.4.0 (2023-06-15) +------------------ + +- Added "implement_cron_bug" flag to make the cron parser compatible with a bug in Vixie/ISC Cron + [kiorky, David White <dwhi...@cisco.com>] + *WARNING*: EXPAND METHOD CHANGES RETURN VALUE + + 1.3.15 (2023-05-25) ------------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-1.3.15/setup.py new/croniter-1.4.1/setup.py --- old/croniter-1.3.15/setup.py 2023-05-25 15:56:30.000000000 +0200 +++ new/croniter-1.4.1/setup.py 2023-06-15 20:03:28.000000000 +0200 @@ -24,7 +24,7 @@ setup( name='croniter', - version='1.3.15', + version='1.4.1', py_modules=['croniter', ], description=( 'croniter provides iteration for datetime ' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-1.3.15/src/croniter/croniter.py new/croniter-1.4.1/src/croniter/croniter.py --- old/croniter-1.3.15/src/croniter/croniter.py 2023-05-25 15:56:30.000000000 +0200 +++ new/croniter-1.4.1/src/croniter/croniter.py 2023-06-15 20:03:28.000000000 +0200 @@ -40,10 +40,12 @@ (r'^(?P<pre>((?P<he>(({WEEKDAYS})(-({WEEKDAYS}))?)').format(WEEKDAYS=WEEKDAYS) + (r'|(({MONTHS})(-({MONTHS}))?)|\w+)#)|l)(?P<last>\d+)$').format(MONTHS=MONTHS) ) +re_star = re.compile('[*]') hash_expression_re = re.compile( r'^(?P<hash_type>h|r)(\((?P<range_begin>\d+)-(?P<range_end>\d+)\))?(\/(?P<divisor>\d+))?$' ) VALID_LEN_EXPRESSION = [5, 6] +EXPRESSIONS = {} def timedelta_to_seconds(td): @@ -151,9 +153,10 @@ def __init__(self, expr_format, start_time=None, ret_type=float, day_or=True, max_years_between_matches=None, is_prev=False, - hash_id=None): + hash_id=None, implement_cron_bug=False): self._ret_type = ret_type self._day_or = day_or + self._implement_cron_bug = implement_cron_bug if hash_id: if not isinstance(hash_id, (bytes, str)): @@ -178,6 +181,7 @@ self.set_current(start_time, force=False) self.expanded, self.nth_weekday_of_month = self.expand(expr_format, hash_id=hash_id) + self.expressions = EXPRESSIONS[(expr_format, hash_id)] self._is_prev = is_prev @classmethod @@ -254,19 +258,30 @@ "is acceptable.") # exception to support day of month and day of week as defined in cron + dom_dow_exception_processed = False if (expanded[2][0] != '*' and expanded[4][0] != '*') and self._day_or: - bak = expanded[4] - expanded[4] = ['*'] - t1 = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev) - expanded[4] = bak - expanded[2] = ['*'] - - t2 = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev) - if not is_prev: - result = t1 if t1 < t2 else t2 + # If requested, handle a bug in vixie cron/ISC cron where day_of_month and day_of_week form + # an intersection (AND) instead of a union (OR) if either field is an asterisk or starts with an asterisk + # (https://crontab.guru/cron-bug.html) + if self._implement_cron_bug and (re_star.match(self.expressions[2]) or re_star.match(self.expressions[4])): + # To produce a schedule identical to the cron bug, we'll bypass the code that + # makes a union of DOM and DOW, and instead skip to the code that does an intersect instead + pass else: - result = t1 if t1 > t2 else t2 - else: + bak = expanded[4] + expanded[4] = ['*'] + t1 = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev) + expanded[4] = bak + expanded[2] = ['*'] + + t2 = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev) + if not is_prev: + result = t1 if t1 < t2 else t2 + else: + result = t1 if t1 > t2 else t2 + dom_dow_exception_processed = True + + if not dom_dow_exception_processed: result = self._calc(self.cur, expanded, nth_weekday_of_month, is_prev) @@ -782,6 +797,7 @@ "day-of-week field does not support mixing literal values and nth day of week syntax. " "Cron: '{}' dow={} vs nth={}".format(expr_format, dow_expanded_set, nth_weekday_of_month)) + EXPRESSIONS[(expr_format, hash_id)] = expressions return expanded, nth_weekday_of_month @classmethod diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-1.3.15/src/croniter/tests/test_croniter.py new/croniter-1.4.1/src/croniter/tests/test_croniter.py --- old/croniter-1.3.15/src/croniter/tests/test_croniter.py 2023-05-25 15:56:30.000000000 +0200 +++ new/croniter-1.4.1/src/croniter/tests/test_croniter.py 2023-06-15 20:03:28.000000000 +0200 @@ -202,6 +202,23 @@ self.assertEqual(n3.day, 1) self.assertEqual(n3.year, 2010) + def testDomDowVixieCronBug(self): + expr = '0 16 */2 * sat' + + # UNION OF "every odd-numbered day" and "every Saturday" + itr = croniter(expr, start_time=datetime(2023, 5, 2), ret_type=datetime) + self.assertEqual(itr.get_next(), datetime(2023, 5, 3, 16, 0, 0)) # Wed May 3 2023 + self.assertEqual(itr.get_next(), datetime(2023, 5, 5, 16, 0, 0)) # Fri May 5 2023 + self.assertEqual(itr.get_next(), datetime(2023, 5, 6, 16, 0, 0)) # Sat May 6 2023 + self.assertEqual(itr.get_next(), datetime(2023, 5, 7, 16, 0, 0)) # Sun May 7 2023 + + # INTERSECTION OF "every odd-numbered day" and "every Saturday" + itr = croniter(expr, start_time=datetime(2023, 5, 2), ret_type=datetime, implement_cron_bug=True) + self.assertEqual(itr.get_next(), datetime(2023, 5, 13, 16, 0, 0)) # Sat May 13 2023 + self.assertEqual(itr.get_next(), datetime(2023, 5, 27, 16, 0, 0)) # Sat May 27 2023 + self.assertEqual(itr.get_next(), datetime(2023, 6, 3, 16, 0, 0)) # Sat June 3 2023 + self.assertEqual(itr.get_next(), datetime(2023, 6, 17, 16, 0, 0)) # Sun June 17 2023 + def testMonth(self): base = datetime(2010, 1, 25) itr = croniter('0 0 1 * *', base) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/croniter-1.3.15/src/croniter.egg-info/PKG-INFO new/croniter-1.4.1/src/croniter.egg-info/PKG-INFO --- old/croniter-1.3.15/src/croniter.egg-info/PKG-INFO 2023-05-25 15:56:30.000000000 +0200 +++ new/croniter-1.4.1/src/croniter.egg-info/PKG-INFO 2023-06-15 20:03:28.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: croniter -Version: 1.3.15 +Version: 1.4.1 Summary: croniter provides iteration for datetime object with cron like format Home-page: http://github.com/kiorky/croniter Author: Matsumoto Taichi, kiorky @@ -323,6 +323,21 @@ Changelog ============== +1.4.1 (2023-06-15) +------------------ + +- Make a retrocompatible version of 1.4.0 change about supporting VIXIECRON bug. (fix #47) + [kiorky] + + +1.4.0 (2023-06-15) +------------------ + +- Added "implement_cron_bug" flag to make the cron parser compatible with a bug in Vixie/ISC Cron + [kiorky, David White <dwhi...@cisco.com>] + *WARNING*: EXPAND METHOD CHANGES RETURN VALUE + + 1.3.15 (2023-05-25) -------------------