Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-billiard for openSUSE:Factory checked in at 2023-11-13 22:18:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-billiard (Old) and /work/SRC/openSUSE:Factory/.python-billiard.new.17445 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-billiard" Mon Nov 13 22:18:01 2023 rev:24 rq:1124875 version:4.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-billiard/python-billiard.changes 2023-06-12 15:27:23.711387003 +0200 +++ /work/SRC/openSUSE:Factory/.python-billiard.new.17445/python-billiard.changes 2023-11-13 22:20:39.087018026 +0100 @@ -1,0 +2,15 @@ +Fri Nov 10 12:21:25 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 4.2.0: + * Update process.py to close during join only if process has + completed. + * Adjust the __repr__ in ApplyResult. + * Remove python 3.7 from CI. + * Added Python 3.12 support. + * Fixed (co_positions): resolve issue caused by absence + co_positions (#395). + * Fixed: Replaced mktemp usage for Python 3 from python 2. + * Changed nose test to pytest (#397) in Integration test. + * Changed nose dependency for unit test (#383). + +------------------------------------------------------------------- Old: ---- billiard-4.1.0.tar.gz New: ---- billiard-4.2.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-billiard.spec ++++++ --- /var/tmp/diff_new_pack.b933Y2/_old 2023-11-13 22:20:39.667039382 +0100 +++ /var/tmp/diff_new_pack.b933Y2/_new 2023-11-13 22:20:39.667039382 +0100 @@ -18,7 +18,7 @@ %{?sle15_python_module_pythons} Name: python-billiard -Version: 4.1.0 +Version: 4.2.0 Release: 0 Summary: Python multiprocessing fork License: BSD-3-Clause ++++++ billiard-4.1.0.tar.gz -> billiard-4.2.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/CHANGES.txt new/billiard-4.2.0/CHANGES.txt --- old/billiard-4.1.0/CHANGES.txt 2022-12-14 09:30:30.000000000 +0100 +++ new/billiard-4.2.0/CHANGES.txt 2023-11-06 06:15:36.000000000 +0100 @@ -1,3 +1,15 @@ +4.2.0 - 2023-11-06 +-------------------- +- Update process.py to close during join only if process has completed. +- Adjust the __repr__ in ApplyResult. +- Remove python 3.7 from CI. +- Added Python 3.12 support. +- Fixed (co_positions): resolve issue caused by absence co_positions (#395). +- Fixed: Replaced mktemp usage for Python 3 from python 2. +- Changed nose test to pytest (#397) in Integration test. +- Changed nose dependency for unit test (#383). + + 4.1.0 - 2022-12-14 -------------------- - Fixed a python 2 to 3 compat issue which was missed earlier (#374). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/PKG-INFO new/billiard-4.2.0/PKG-INFO --- old/billiard-4.1.0/PKG-INFO 2022-12-14 09:36:35.346751700 +0100 +++ new/billiard-4.2.0/PKG-INFO 2023-11-06 06:22:31.922458000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: billiard -Version: 4.1.0 +Version: 4.2.0 Summary: Python multiprocessing fork with improvements and bugfixes Home-page: https://github.com/celery/billiard Author: R Oudkerk / Python Software Foundation @@ -15,7 +15,7 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: C Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 @@ -33,15 +33,15 @@ ======== billiard ======== -:version: 4.1.0 +:version: 4.2.0 |build-status-lin| |build-status-win| |license| |wheel| |pyversion| |pyimp| -.. |build-status-lin| image:: https://secure.travis-ci.org/celery/billiard.png?branch=master +.. |build-status-lin| image:: https://github.com/celery/billiard/actions/workflows/ci.yaml/badge.svg :alt: Build status on Linux - :target: https://travis-ci.org/celery/billiard + :target: https://github.com/celery/billiard/actions/workflows/ci.yaml -.. |build-status-win| image:: https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=master +.. |build-status-win| image:: https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=main :alt: Build status on Windows :target: https://ci.appveyor.com/project/ask/billiard diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/README.rst new/billiard-4.2.0/README.rst --- old/billiard-4.1.0/README.rst 2022-12-14 09:32:30.000000000 +0100 +++ new/billiard-4.2.0/README.rst 2023-11-06 06:19:56.000000000 +0100 @@ -1,15 +1,15 @@ ======== billiard ======== -:version: 4.1.0 +:version: 4.2.0 |build-status-lin| |build-status-win| |license| |wheel| |pyversion| |pyimp| -.. |build-status-lin| image:: https://secure.travis-ci.org/celery/billiard.png?branch=master +.. |build-status-lin| image:: https://github.com/celery/billiard/actions/workflows/ci.yaml/badge.svg :alt: Build status on Linux - :target: https://travis-ci.org/celery/billiard + :target: https://github.com/celery/billiard/actions/workflows/ci.yaml -.. |build-status-win| image:: https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=master +.. |build-status-win| image:: https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=main :alt: Build status on Windows :target: https://ci.appveyor.com/project/ask/billiard diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/billiard/__init__.py new/billiard-4.2.0/billiard/__init__.py --- old/billiard-4.1.0/billiard/__init__.py 2022-12-14 09:33:32.000000000 +0100 +++ new/billiard-4.2.0/billiard/__init__.py 2023-11-06 06:17:54.000000000 +0100 @@ -21,7 +21,7 @@ import sys from . import context -VERSION = (4, 1, 0) +VERSION = (4, 2, 0) __version__ = '.'.join(map(str, VERSION[0:4])) + "".join(VERSION[4:]) __author__ = 'R Oudkerk / Python Software Foundation' __author_email__ = 'python-...@python.org' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/billiard/einfo.py new/billiard-4.2.0/billiard/einfo.py --- old/billiard-4.1.0/billiard/einfo.py 2022-12-14 09:21:04.000000000 +0100 +++ new/billiard-4.2.0/billiard/einfo.py 2023-11-05 10:14:38.000000000 +0100 @@ -57,12 +57,32 @@ # don't want to hit https://bugs.python.org/issue21967 self.f_restricted = False + if sys.version_info >= (3, 11): + @property + def co_positions(self): + return self.f_code.co_positions + class _Object: def __init__(self, **kw): [setattr(self, k, v) for k, v in kw.items()] + if sys.version_info >= (3, 11): + __default_co_positions__ = ((None, None, None, None),) + + @property + def co_positions(self): + return getattr( + self, + "_co_positions", + self.__default_co_positions__ + ).__iter__ + + @co_positions.setter + def co_positions(self, value): + self._co_positions = value # noqa + class _Truncated: @@ -79,6 +99,11 @@ self.tb_next = None self.tb_lasti = 0 + if sys.version_info >= (3, 11): + @property + def co_positions(self): + return self.tb_frame.co_positions + class Traceback: Frame = _Frame diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/billiard/heap.py new/billiard-4.2.0/billiard/heap.py --- old/billiard-4.1.0/billiard/heap.py 2022-04-24 10:15:51.000000000 +0200 +++ new/billiard-4.2.0/billiard/heap.py 2023-11-05 10:14:38.000000000 +0100 @@ -90,15 +90,12 @@ f.write(b'\0' * (size % bs)) assert f.tell() == size else: - name = tempfile.mktemp( + self.fd, name = tempfile.mkstemp( prefix='pym-%d-' % (os.getpid(),), dir=util.get_temp_dir(), ) - self.fd = os.open( - name, os.O_RDWR | os.O_CREAT | os.O_EXCL, 0o600, - ) - util.Finalize(self, os.close, (self.fd,)) os.unlink(name) + util.Finalize(self, os.close, (self.fd,)) os.ftruncate(self.fd, size) self.buffer = mmap.mmap(self.fd, self.size) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/billiard/pool.py new/billiard-4.2.0/billiard/pool.py --- old/billiard-4.1.0/billiard/pool.py 2022-12-14 09:21:04.000000000 +0100 +++ new/billiard-4.2.0/billiard/pool.py 2023-11-05 10:14:38.000000000 +0100 @@ -1741,8 +1741,8 @@ cache[self._job] = self def __repr__(self): - return '<%s: {id} ack:{ack} ready:{ready}>'.format( - self.__class__.__name__, + return '<{name}: {id} ack:{ack} ready:{ready}>'.format( + name=self.__class__.__name__, id=self._job, ack=self._accepted, ready=self.ready(), ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/billiard/process.py new/billiard-4.2.0/billiard/process.py --- old/billiard-4.1.0/billiard/process.py 2022-04-24 10:15:51.000000000 +0200 +++ new/billiard-4.2.0/billiard/process.py 2023-11-05 10:14:38.000000000 +0100 @@ -144,7 +144,7 @@ res = self._popen.wait(timeout) if res is not None: _children.discard(self) - self.close() + self.close() def is_alive(self): ''' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/billiard.egg-info/PKG-INFO new/billiard-4.2.0/billiard.egg-info/PKG-INFO --- old/billiard-4.1.0/billiard.egg-info/PKG-INFO 2022-12-14 09:36:34.000000000 +0100 +++ new/billiard-4.2.0/billiard.egg-info/PKG-INFO 2023-11-06 06:22:31.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: billiard -Version: 4.1.0 +Version: 4.2.0 Summary: Python multiprocessing fork with improvements and bugfixes Home-page: https://github.com/celery/billiard Author: R Oudkerk / Python Software Foundation @@ -15,7 +15,7 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: C Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 @@ -33,15 +33,15 @@ ======== billiard ======== -:version: 4.1.0 +:version: 4.2.0 |build-status-lin| |build-status-win| |license| |wheel| |pyversion| |pyimp| -.. |build-status-lin| image:: https://secure.travis-ci.org/celery/billiard.png?branch=master +.. |build-status-lin| image:: https://github.com/celery/billiard/actions/workflows/ci.yaml/badge.svg :alt: Build status on Linux - :target: https://travis-ci.org/celery/billiard + :target: https://github.com/celery/billiard/actions/workflows/ci.yaml -.. |build-status-win| image:: https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=master +.. |build-status-win| image:: https://ci.appveyor.com/api/projects/status/github/celery/billiard?png=true&branch=main :alt: Build status on Windows :target: https://ci.appveyor.com/project/ask/billiard diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/setup.py new/billiard-4.2.0/setup.py --- old/billiard-4.1.0/setup.py 2022-12-14 09:23:25.000000000 +0100 +++ new/billiard-4.2.0/setup.py 2023-11-06 06:19:39.000000000 +0100 @@ -213,7 +213,7 @@ 'Programming Language :: Python', 'Programming Language :: C', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/t/integration/setup.py new/billiard-4.2.0/t/integration/setup.py --- old/billiard-4.1.0/t/integration/setup.py 2022-04-24 08:20:04.000000000 +0200 +++ new/billiard-4.2.0/t/integration/setup.py 2023-11-05 10:56:20.000000000 +0100 @@ -40,9 +40,9 @@ data_files=[], zip_safe=False, cmdclass={'install': no_install}, - test_suite='nose.collector', + test_suite='pytest', build_requires=[ - 'nose', + 'pytest', 'coverage>=3.0', ], classifiers=[ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/t/integration/tests/test_multiprocessing.py new/billiard-4.2.0/t/integration/tests/test_multiprocessing.py --- old/billiard-4.1.0/t/integration/tests/test_multiprocessing.py 2022-04-24 08:20:04.000000000 +0200 +++ new/billiard-4.2.0/t/integration/tests/test_multiprocessing.py 2023-11-06 06:05:25.000000000 +0100 @@ -13,13 +13,15 @@ import array import random import logging -from nose import SkipTest -from test import test_support from StringIO import StringIO + +import pytest +from test import test_support + try: from billiard._ext import _billiard except ImportError as exc: - raise SkipTest(exc) + raise pytest.skip(exc) # import threading after _billiard to raise a more revelant error # message: "No module named _billiard". _billiard is not compiled # without thread support. @@ -29,7 +31,7 @@ try: import billiard.synchronize except ImportError as exc: - raise SkipTest(exc) + raise pytest.skip(exc) import billiard.dummy import billiard.connection @@ -508,7 +510,7 @@ queue = self.JoinableQueue() if sys.version_info < (2, 5) and not hasattr(queue, 'task_done'): - self.skipTest("requires 'queue.task_done()' method") + pytest.skip("requires 'queue.task_done()' method") workers = [self.Process(target=self._test_task_done, args=(queue,)) for i in xrange(4)] @@ -1987,7 +1989,7 @@ try: billiard.RLock() except OSError: - raise SkipTest("OSError raises on RLock creation, see issue 3111!") + raise pytest.skip("OSError raises on RLock creation, see issue 3111!") if run is None: from test.test_support import run_unittest as run diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/billiard-4.1.0/t/unit/test_einfo.py new/billiard-4.2.0/t/unit/test_einfo.py --- old/billiard-4.1.0/t/unit/test_einfo.py 2022-08-03 07:05:40.000000000 +0200 +++ new/billiard-4.2.0/t/unit/test_einfo.py 2023-11-05 10:14:38.000000000 +0100 @@ -1,6 +1,12 @@ -import pickle import logging -from billiard.einfo import ExceptionInfo +import pickle +import sys + +from billiard.einfo import _Code # noqa +from billiard.einfo import _Frame # noqa +from billiard.einfo import _Object # noqa +from billiard.einfo import _Truncated # noqa +from billiard.einfo import ExceptionInfo, Traceback logger = logging.getLogger(__name__) @@ -26,3 +32,87 @@ logger.exception("failed", exc_info=exception) assert ' raise RuntimeError("some message")' in caplog.text assert "RuntimeError: some message" in caplog.text + + +def test_exception_info(): + try: + raise ValueError("Test Exception") + except ValueError: + exc_info = sys.exc_info() + e_info = ExceptionInfo(exc_info) + assert isinstance(e_info.type, type) + assert isinstance(e_info.exception, Exception) + assert isinstance(e_info.tb, Traceback) + assert isinstance(e_info.traceback, str) + + +def test_traceback(): + try: + raise ValueError("Test Exception") + except ValueError: + tb = sys.exc_info()[2] + trace = Traceback(tb) + assert isinstance(trace.tb_frame, _Frame) + assert isinstance(trace.tb_lineno, int) + assert isinstance(trace.tb_lasti, int) + assert trace.tb_next is None or isinstance(trace.tb_next, Traceback) + + +def test_frame(): + try: + raise ValueError("Test Exception") + except ValueError: + tb = sys.exc_info()[2] + frame = _Frame(tb.tb_frame) + assert isinstance(frame.f_code, _Code) + assert isinstance(frame.f_lineno, int) + assert isinstance(frame.f_lasti, int) + assert frame.f_globals == { + "__file__": frame.f_globals.get("__file__", "__main__"), + "__name__": frame.f_globals.get("__name__"), + "__loader__": None, + } + + +def test_code(): + try: + raise ValueError("Test Exception") + except ValueError: + tb = sys.exc_info()[2] + frame = tb.tb_frame + code = _Code(frame.f_code) + assert isinstance(code.co_filename, str) + assert isinstance(code.co_name, str) + assert isinstance(code.co_argcount, int) + if sys.version_info >= (3, 11): + assert callable(code.co_positions) + assert next(code.co_positions()) == (77, 77, 0, 0) + + +def test_object_init(): + obj = _Object(a=1, b=2, c=3) + assert obj.a == 1 + assert obj.b == 2 + assert obj.c == 3 + + +if sys.version_info >= (3, 11): + + def test_object_co_positions(): + obj = _Object() + + default = ((None, None, None, None),) + # Test that it returns the default co_positions + assert list(iter(obj.co_positions())) == list(default) + + # Test setting co_positions + new_value = ((1, 2, 3, 4),) + obj.co_positions = new_value + assert list(iter(obj.co_positions())) == list(new_value) + + def test_truncated_co_positions(): + truncated = _Truncated() + + assert list(iter(truncated.co_positions())) == list( + iter(truncated.tb_frame.co_positions()) + )