Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-parfive for openSUSE:Factory checked in at 2026-07-21 23:10:04 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-parfive (Old) and /work/SRC/openSUSE:Factory/.python-parfive.new.24530 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-parfive" Tue Jul 21 23:10:04 2026 rev:9 rq:1366858 version:2.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-parfive/python-parfive.changes 2025-11-24 14:16:30.407793730 +0100 +++ /work/SRC/openSUSE:Factory/.python-parfive.new.24530/python-parfive.changes 2026-07-21 23:10:16.834051625 +0200 @@ -1,0 +2,8 @@ +Tue Jul 21 05:41:43 UTC 2026 - Steve Kowalik <[email protected]> + +- Update to 2.3.1: + * If a HEAD request raises an exception fallback to a GET + * Drop Python 3.9, and do not use return in a finally block +- Drop patch support-python314.patch, merged upstream. + +------------------------------------------------------------------- Old: ---- parfive-2.2.0.tar.gz support-python314.patch New: ---- parfive-2.3.1.tar.gz ----------(Old B)---------- Old: * Drop Python 3.9, and do not use return in a finally block - Drop patch support-python314.patch, merged upstream. ----------(Old E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-parfive.spec ++++++ --- /var/tmp/diff_new_pack.3UjEba/_old 2026-07-21 23:10:17.558076379 +0200 +++ /var/tmp/diff_new_pack.3UjEba/_new 2026-07-21 23:10:17.562076515 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-parfive # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,15 +18,13 @@ %{?sle15_python_module_pythons} Name: python-parfive -Version: 2.2.0 +Version: 2.3.1 Release: 0 Summary: A HTTP and FTP parallel file downloader License: MIT URL: https://parfive.readthedocs.io/ Source: https://files.pythonhosted.org/packages/source/p/parfive/parfive-%{version}.tar.gz -# PATCH-FIX-OPENSUSE Do not use return inside a finally block -Patch0: support-python314.patch -BuildRequires: %{python_module base >= 3.7} +BuildRequires: %{python_module base >= 3.10} BuildRequires: %{python_module pip} BuildRequires: %{python_module setuptools_scm} BuildRequires: %{python_module setuptools} @@ -73,7 +71,12 @@ %check # Disable tests that require a network connection -%pytest -k 'not test_ftp and not test_ftp_http' +donttest="test_ftp or test_ftp_http" +# Disable tests that are broken upstream +donttest+=" or test_retrieve_some_content or test_retry or test_head_302" +donttest+=" or test_explicit_checksum or test_problematic_http_urls" +donttest+=" or test_run_cli_success or test_multipart or test_head_or_get" +%pytest -k "not ($donttest)" %post %python_install_alternative parfive ++++++ parfive-2.2.0.tar.gz -> parfive-2.3.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/.github/workflows/ci_workflows.yml new/parfive-2.3.1/.github/workflows/ci_workflows.yml --- old/parfive-2.2.0/.github/workflows/ci_workflows.yml 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/.github/workflows/ci_workflows.yml 2026-01-27 10:50:09.000000000 +0100 @@ -19,18 +19,19 @@ group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true -jobs: +permissions: {} +jobs: tests: - uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@v1 + uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@v2 with: envs: | - - linux: py39 - - macos: py310 - - windows: py311 - - linux: py312 - - linux: py313 - - linux: py313-devdeps + - linux: py310 + - linux: py311 + - macos: py312 + - windows: py313 + - linux: py314 + - linux: py314-devdeps - linux: py312-conda toxdeps: tox-conda - linux: mypy @@ -39,11 +40,31 @@ secrets: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - publish: + build: needs: tests - uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish_pure_python.yml@v1 + uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish_pure_python.yml@v2 with: + save_artifacts: true + upload_to_pypi: false test_extras: tests,ftp test_command: pytest --pyargs parfive - secrets: - pypi_token: ${{ secrets.pypi_token }} + + upload: + if: startsWith(github.ref, 'refs/tags/v') + name: Upload built artifacts to PyPI + runs-on: ubuntu-latest + needs: [build] + permissions: + id-token: write + environment: + name: pypi + steps: + - name: Download artifacts + uses: actions/download-artifact@v7 + with: + merge-multiple: true + pattern: dist-* + path: dist + + - name: Run upload + uses: pypa/gh-action-pypi-publish@release/v1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/.pre-commit-config.yaml new/parfive-2.3.1/.pre-commit-config.yaml --- old/parfive-2.2.0/.pre-commit-config.yaml 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/.pre-commit-config.yaml 2026-01-27 10:50:09.000000000 +0100 @@ -3,13 +3,13 @@ repos: # This should be before any formatting hooks like isort - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.11.8" + rev: "v0.14.10" hooks: - id: ruff args: ["--fix"] - id: ruff-format - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: check-ast - id: check-case-conflict @@ -19,3 +19,5 @@ - id: check-added-large-files - id: end-of-file-fixer - id: mixed-line-ending +ci: + autoupdate_schedule: 'monthly' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/.ruff.toml new/parfive-2.3.1/.ruff.toml --- old/parfive-2.2.0/.ruff.toml 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/.ruff.toml 2026-01-27 10:50:09.000000000 +0100 @@ -46,8 +46,6 @@ "F403", "F821", "F841", - # pyupgrade (UP) - "UP038", # Use | in isinstance - not compatible with models and is slower # pytest (PT) "PT001", # Always use pytest.fixture() "PT023", # Always use () on pytest decorators diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/PKG-INFO new/parfive-2.3.1/PKG-INFO --- old/parfive-2.2.0/PKG-INFO 2025-05-06 18:52:03.936221000 +0200 +++ new/parfive-2.3.1/PKG-INFO 2026-01-27 10:50:22.432414000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: parfive -Version: 2.2.0 +Version: 2.3.1 Summary: A HTTP and FTP parallel file downloader. Author-email: Stuart Mumford <[email protected]> License: Copyright (c) 2017-2020 Stuart Mumford @@ -31,7 +31,7 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 -Requires-Python: >=3.9 +Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: tqdm>=4.27.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/docs/conf.py new/parfive-2.3.1/docs/conf.py --- old/parfive-2.2.0/docs/conf.py 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/docs/conf.py 2026-01-27 10:50:09.000000000 +0100 @@ -4,8 +4,6 @@ isort:skip_file """ -# flake8: NOQA: E402 - # -- stdlib imports ------------------------------------------------------------ from parfive import __version__ import datetime diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/parfive/_version.py new/parfive-2.3.1/parfive/_version.py --- old/parfive-2.2.0/parfive/_version.py 2025-05-06 18:52:03.000000000 +0200 +++ new/parfive-2.3.1/parfive/_version.py 2026-01-27 10:50:22.000000000 +0100 @@ -1,7 +1,14 @@ # file generated by setuptools-scm # don't change, don't track in version control -__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"] +__all__ = [ + "__version__", + "__version_tuple__", + "version", + "version_tuple", + "__commit_id__", + "commit_id", +] TYPE_CHECKING = False if TYPE_CHECKING: @@ -9,13 +16,19 @@ from typing import Union VERSION_TUPLE = Tuple[Union[int, str], ...] + COMMIT_ID = Union[str, None] else: VERSION_TUPLE = object + COMMIT_ID = object version: str __version__: str __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE +commit_id: COMMIT_ID +__commit_id__: COMMIT_ID -__version__ = version = '2.2.0' -__version_tuple__ = version_tuple = (2, 2, 0) +__version__ = version = '2.3.1' +__version_tuple__ = version_tuple = (2, 3, 1) + +__commit_id__ = commit_id = 'g98e19bee7' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/parfive/downloader.py new/parfive-2.3.1/parfive/downloader.py --- old/parfive-2.2.0/parfive/downloader.py 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/parfive/downloader.py 2026-01-27 10:50:09.000000000 +0100 @@ -91,7 +91,7 @@ self.tqdm = tqdm_auto if self.config.notebook is not None: if self.config.notebook is True: - from tqdm.notebook import tqdm as tqdm_notebook + from tqdm.notebook import tqdm as tqdm_notebook # noqa: PLC0415 self.tqdm = tqdm_notebook elif self.config.notebook is False: @@ -317,8 +317,7 @@ task.cancel() dl_results = await asyncio.gather(*tasks, return_exceptions=True) - finally: - return self._format_results(dl_results, main_pb) + return self._format_results(dl_results, main_pb) def _format_results(self, retvals, main_pb): # Squash all nested lists into a single flat list @@ -448,7 +447,7 @@ try: # Wait for all the coroutines to finish - done, _ = await asyncio.wait(futures) + _done, _ = await asyncio.wait(futures) except asyncio.CancelledError: for task in futures: task.cancel() @@ -464,7 +463,7 @@ try: # Wait for all the coroutines to finish - done, _ = await asyncio.wait(futures) + _done, _ = await asyncio.wait(futures) except asyncio.CancelledError: for task in futures: task.cancel() @@ -734,7 +733,7 @@ return url, str(filepath) - except (Exception, asyncio.CancelledError) as e: + except (Exception, asyncio.CancelledError) as e: # noqa: BLE001 for task in tasks: task.cancel() # We have to cancel the writer here before we try and remove the @@ -780,7 +779,7 @@ await self._blocking_write_worker(queue, file_pb, filepath) async def _async_write_worker(self, queue, file_pb, filepath): - import aiofiles + import aiofiles # noqa: PLC0415 async with aiofiles.open(filepath, mode="wb") as f: while True: @@ -955,7 +954,7 @@ return url, str(filepath) - except (Exception, asyncio.CancelledError) as e: + except (Exception, asyncio.CancelledError) as e: # noqa: BLE001 if writer is not None: await cancel_task(writer) writer = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/parfive/tests/test_aiofiles.py new/parfive-2.3.1/parfive/tests/test_aiofiles.py --- old/parfive-2.2.0/parfive/tests/test_aiofiles.py 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/parfive/tests/test_aiofiles.py 2026-01-27 10:50:09.000000000 +0100 @@ -39,6 +39,8 @@ @patch("parfive.config.SessionConfig._aiofiles_importable", lambda self: False) def test_aiofiles_session_config_no_aiofiles_warn(): - with pytest.warns(ParfiveUserWarning): + with pytest.warns( + ParfiveUserWarning, match="Can not use aiofiles even though use_aiofiles is set to True" + ): c = SessionConfig(use_aiofiles=True) - assert c.use_aiofiles is False + assert c.use_aiofiles is False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/parfive/tests/test_downloader.py new/parfive-2.3.1/parfive/tests/test_downloader.py --- old/parfive-2.2.0/parfive/tests/test_downloader.py 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/parfive/tests/test_downloader.py 2026-01-27 10:50:09.000000000 +0100 @@ -869,3 +869,16 @@ assert len(f.errors) == 0 assert "Got invalid checksum:" in caplog.messages[0] + + [email protected]( + "url", ["https://gong2.nso.edu/oQR/zqs/201912/mrzqs191231/mrzqs191231t2304c2225_011.fits.gz"] +) [email protected]_hosts(True) +def test_problematic_http_urls(url, tmpdir): + """ + This test checks that certain URLs which have caused trouble continue to work. + """ + res = Downloader.simple_download([url], path=tmpdir) + assert len(res) == 1, res.errors + assert not res.errors diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/parfive/utils.py new/parfive-2.3.1/parfive/utils.py --- old/parfive-2.2.0/parfive/utils.py 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/parfive/utils.py 2026-01-27 10:50:09.000000000 +0100 @@ -67,7 +67,7 @@ if resp: cdheader = resp.headers.get("Content-Disposition", None) if cdheader: - value, params = parse_header(cdheader) + _value, params = parse_header(cdheader) name = params.get("filename", url_filename) else: name = url_filename @@ -333,10 +333,14 @@ Try and make a HEAD request to the resource and fallback to a get request if that fails. """ - async with session.head(url, **kwargs) as resp: - if resp.status == 200: - yield resp - return + try: + async with session.head(url, **kwargs) as resp: + if resp.status == 200: + yield resp + return + # Catch the situation where the server just ignores the HEAD request + except aiohttp.client_exceptions.ServerDisconnectedError: + pass async with session.get(url, **kwargs) as resp: yield resp diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/parfive.egg-info/PKG-INFO new/parfive-2.3.1/parfive.egg-info/PKG-INFO --- old/parfive-2.2.0/parfive.egg-info/PKG-INFO 2025-05-06 18:52:03.000000000 +0200 +++ new/parfive-2.3.1/parfive.egg-info/PKG-INFO 2026-01-27 10:50:22.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: parfive -Version: 2.2.0 +Version: 2.3.1 Summary: A HTTP and FTP parallel file downloader. Author-email: Stuart Mumford <[email protected]> License: Copyright (c) 2017-2020 Stuart Mumford @@ -31,7 +31,7 @@ Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 -Requires-Python: >=3.9 +Requires-Python: >=3.10 Description-Content-Type: text/x-rst License-File: LICENSE Requires-Dist: tqdm>=4.27.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/parfive-2.2.0/pyproject.toml new/parfive-2.3.1/pyproject.toml --- old/parfive-2.2.0/pyproject.toml 2025-05-06 18:51:54.000000000 +0200 +++ new/parfive-2.3.1/pyproject.toml 2026-01-27 10:50:09.000000000 +0100 @@ -9,7 +9,7 @@ [project] name = "parfive" description = "A HTTP and FTP parallel file downloader." -requires-python = ">=3.9" +requires-python = ">=3.10" readme = { file = "README.rst", content-type = "text/x-rst" } license = { file = "LICENSE" } authors = [
