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 = [

Reply via email to