Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-httpcore2 for 
openSUSE:Factory checked in at 2026-09-28 10:36:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-httpcore2 (Old)
 and      /work/SRC/openSUSE:Factory/.python-httpcore2.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-httpcore2"

Mon Sep 28 10:36:25 2026 rev:4 rq:1380301 version:2.13.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-httpcore2/python-httpcore2.changes        
2026-08-27 18:53:14.884475761 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-httpcore2.new.383539/python-httpcore2.changes
    2026-09-28 10:37:03.526346233 +0200
@@ -1,0 +2,14 @@
+Fri Sep 25 04:47:18 UTC 2026 - Steve Kowalik <[email protected]>
+
+- Update to 2.13.1:
+  ## Changed
+  * Require Trio 0.34.0 or later for the trio extra.
+  ## Fixed
+  * Honor the sni_hostname extension for TLS inside HTTP proxy tunnels
+    without applying it to the proxy's TLS connection.
+  * Prefer HTTP/2 during TLS protocol negotiation when enabled, and stop
+    advertising HTTP/1.1 when it is disabled.
+  * Avoid nested async generator finalization errors when streamed responses
+    are abandoned early.
+
+-------------------------------------------------------------------

Old:
----
  httpcore2-2.12.0.tar.gz

New:
----
  httpcore2-2.13.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-httpcore2.spec ++++++
--- /var/tmp/diff_new_pack.xY25Ht/_old  2026-09-28 10:37:04.254376749 +0200
+++ /var/tmp/diff_new_pack.xY25Ht/_new  2026-09-28 10:37:04.255376791 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-httpcore2
-Version:        2.12.0
+Version:        2.13.1
 Release:        0
 Summary:        A minimal low-level HTTP client
 License:        BSD-3-Clause
@@ -37,7 +37,7 @@
 Requires:       python-truststore >= 0.10
 Suggests:       python-h2 >= 3
 Suggests:       python-socksio >= 1.0
-Suggests:       python-trio >= 0.33.0
+Suggests:       python-trio >= 0.34.0
 Suggests:       python-anyio >= 4.5
 BuildArch:      noarch
 %python_subpackages

++++++ httpcore2-2.12.0.tar.gz -> httpcore2-2.13.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/CHANGELOG.md 
new/httpcore2-2.13.1/CHANGELOG.md
--- old/httpcore2-2.12.0/CHANGELOG.md   2020-02-02 01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/CHANGELOG.md   2020-02-02 01:00:00.000000000 +0100
@@ -4,6 +4,27 @@
 
 The format is based on [Keep a 
Changelog](https://keepachangelog.com/en/1.0.0/).
 
+## 2.13.1 (September 23rd, 2026)
+
+### Fixed
+
+* Honor the `sni_hostname` extension for TLS inside HTTP proxy tunnels without 
applying it to the proxy's TLS connection.
+  ([#1223](https://github.com/pydantic/httpx2/pull/1223))
+* Prefer HTTP/2 during TLS protocol negotiation when enabled, and stop 
advertising HTTP/1.1 when it is disabled.
+  ([#1155](https://github.com/pydantic/httpx2/pull/1155))
+
+## 2.13.0 (September 14th, 2026)
+
+### Changed
+
+* Require Trio 0.34.0 or later for the `trio` extra.
+  ([#1179](https://github.com/pydantic/httpx2/pull/1179))
+
+### Fixed
+
+* Avoid nested async generator finalization errors when streamed responses are 
abandoned early.
+  ([#1204](https://github.com/pydantic/httpx2/pull/1204))
+
 ## 2.12.0 (August 18th, 2026)
 
 No changes since `2.11.0`. Version bumped to stay in lockstep with `httpx2`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/PKG-INFO 
new/httpcore2-2.13.1/PKG-INFO
--- old/httpcore2-2.12.0/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.5
 Name: httpcore2
-Version: 2.12.0
+Version: 2.13.1
 Summary: A minimal low-level HTTP client.
 Project-URL: Changelog, 
https://github.com/pydantic/httpx2/blob/main/src/httpcore2/CHANGELOG.md
 Project-URL: Homepage, https://github.com/pydantic/httpx2
@@ -36,7 +36,7 @@
 Provides-Extra: socks
 Requires-Dist: socksio==1.*; extra == 'socks'
 Provides-Extra: trio
-Requires-Dist: trio<1.0,>=0.33.0; extra == 'trio'
+Requires-Dist: trio<1.0,>=0.34.0; extra == 'trio'
 Description-Content-Type: text/markdown
 
 # HTTPCore 2
@@ -152,6 +152,27 @@
 
 The format is based on [Keep a 
Changelog](https://keepachangelog.com/en/1.0.0/).
 
+## 2.13.1 (September 23rd, 2026)
+
+### Fixed
+
+* Honor the `sni_hostname` extension for TLS inside HTTP proxy tunnels without 
applying it to the proxy's TLS connection.
+  ([#1223](https://github.com/pydantic/httpx2/pull/1223))
+* Prefer HTTP/2 during TLS protocol negotiation when enabled, and stop 
advertising HTTP/1.1 when it is disabled.
+  ([#1155](https://github.com/pydantic/httpx2/pull/1155))
+
+## 2.13.0 (September 14th, 2026)
+
+### Changed
+
+* Require Trio 0.34.0 or later for the `trio` extra.
+  ([#1179](https://github.com/pydantic/httpx2/pull/1179))
+
+### Fixed
+
+* Avoid nested async generator finalization errors when streamed responses are 
abandoned early.
+  ([#1204](https://github.com/pydantic/httpx2/pull/1204))
+
 ## 2.12.0 (August 18th, 2026)
 
 No changes since `2.11.0`. Version bumped to stay in lockstep with `httpx2`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/httpcore2/_async/connection.py 
new/httpcore2-2.13.1/httpcore2/_async/connection.py
--- old/httpcore2-2.12.0/httpcore2/_async/connection.py 2020-02-02 
01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/httpcore2/_async/connection.py 2020-02-02 
01:00:00.000000000 +0100
@@ -128,7 +128,7 @@
 
                 if self._origin.scheme in (b"https", b"wss"):
                     ssl_context = default_ssl_context() if self._ssl_context 
is None else self._ssl_context
-                    alpn_protocols = ["http/1.1", "h2"] if self._http2 else 
["http/1.1"]
+                    alpn_protocols = (["h2", "http/1.1"] if self._http1 else 
["h2"]) if self._http2 else ["http/1.1"]
                     ssl_context.set_alpn_protocols(alpn_protocols)
 
                     kwargs = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/httpcore2/_async/http_proxy.py 
new/httpcore2-2.13.1/httpcore2/_async/http_proxy.py
--- old/httpcore2-2.12.0/httpcore2/_async/http_proxy.py 2020-02-02 
01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/httpcore2/_async/http_proxy.py 2020-02-02 
01:00:00.000000000 +0100
@@ -191,7 +191,7 @@
             url=url,
             headers=headers,
             content=request.stream,
-            extensions=request.extensions,
+            extensions={key: value for key, value in 
request.extensions.items() if key != "sni_hostname"},
         )
         return await self._connection.handle_async_request(proxy_request)
 
@@ -274,7 +274,7 @@
                     method=b"CONNECT",
                     url=connect_url,
                     headers=connect_headers,
-                    extensions=request.extensions,
+                    extensions={key: value for key, value in 
request.extensions.items() if key != "sni_hostname"},
                 )
                 connect_response = await 
self._connection.handle_async_request(connect_request)
 
@@ -289,12 +289,13 @@
 
                 # Upgrade the stream to SSL
                 ssl_context = default_ssl_context() if self._ssl_context is 
None else self._ssl_context
-                alpn_protocols = ["http/1.1", "h2"] if self._http2 else 
["http/1.1"]
+                alpn_protocols = (["h2", "http/1.1"] if self._http1 else 
["h2"]) if self._http2 else ["http/1.1"]
                 ssl_context.set_alpn_protocols(alpn_protocols)
 
+                server_hostname = request.extensions.get("sni_hostname") or 
self._remote_origin.host.decode("ascii")
                 kwargs = {
                     "ssl_context": ssl_context,
-                    "server_hostname": 
self._remote_origin.host.decode("ascii"),
+                    "server_hostname": server_hostname,
                     "timeout": timeout,
                 }
                 async with Trace("start_tls", logger, request, kwargs) as 
trace:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/httpcore2/_async/socks_proxy.py 
new/httpcore2-2.13.1/httpcore2/_async/socks_proxy.py
--- old/httpcore2-2.12.0/httpcore2/_async/socks_proxy.py        2020-02-02 
01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/httpcore2/_async/socks_proxy.py        2020-02-02 
01:00:00.000000000 +0100
@@ -242,7 +242,9 @@
                     # Upgrade the stream to SSL
                     if self._remote_origin.scheme in (b"https", b"wss"):
                         ssl_context = default_ssl_context() if 
self._ssl_context is None else self._ssl_context
-                        alpn_protocols = ["http/1.1", "h2"] if self._http2 
else ["http/1.1"]
+                        alpn_protocols = (
+                            (["h2", "http/1.1"] if self._http1 else ["h2"]) if 
self._http2 else ["http/1.1"]
+                        )
                         ssl_context.set_alpn_protocols(alpn_protocols)
 
                         kwargs = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/httpcore2/_sync/connection.py 
new/httpcore2-2.13.1/httpcore2/_sync/connection.py
--- old/httpcore2-2.12.0/httpcore2/_sync/connection.py  2020-02-02 
01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/httpcore2/_sync/connection.py  2020-02-02 
01:00:00.000000000 +0100
@@ -128,7 +128,7 @@
 
                 if self._origin.scheme in (b"https", b"wss"):
                     ssl_context = default_ssl_context() if self._ssl_context 
is None else self._ssl_context
-                    alpn_protocols = ["http/1.1", "h2"] if self._http2 else 
["http/1.1"]
+                    alpn_protocols = (["h2", "http/1.1"] if self._http1 else 
["h2"]) if self._http2 else ["http/1.1"]
                     ssl_context.set_alpn_protocols(alpn_protocols)
 
                     kwargs = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/httpcore2/_sync/http_proxy.py 
new/httpcore2-2.13.1/httpcore2/_sync/http_proxy.py
--- old/httpcore2-2.12.0/httpcore2/_sync/http_proxy.py  2020-02-02 
01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/httpcore2/_sync/http_proxy.py  2020-02-02 
01:00:00.000000000 +0100
@@ -191,7 +191,7 @@
             url=url,
             headers=headers,
             content=request.stream,
-            extensions=request.extensions,
+            extensions={key: value for key, value in 
request.extensions.items() if key != "sni_hostname"},
         )
         return self._connection.handle_request(proxy_request)
 
@@ -274,7 +274,7 @@
                     method=b"CONNECT",
                     url=connect_url,
                     headers=connect_headers,
-                    extensions=request.extensions,
+                    extensions={key: value for key, value in 
request.extensions.items() if key != "sni_hostname"},
                 )
                 connect_response = 
self._connection.handle_request(connect_request)
 
@@ -289,12 +289,13 @@
 
                 # Upgrade the stream to SSL
                 ssl_context = default_ssl_context() if self._ssl_context is 
None else self._ssl_context
-                alpn_protocols = ["http/1.1", "h2"] if self._http2 else 
["http/1.1"]
+                alpn_protocols = (["h2", "http/1.1"] if self._http1 else 
["h2"]) if self._http2 else ["http/1.1"]
                 ssl_context.set_alpn_protocols(alpn_protocols)
 
+                server_hostname = request.extensions.get("sni_hostname") or 
self._remote_origin.host.decode("ascii")
                 kwargs = {
                     "ssl_context": ssl_context,
-                    "server_hostname": 
self._remote_origin.host.decode("ascii"),
+                    "server_hostname": server_hostname,
                     "timeout": timeout,
                 }
                 with Trace("start_tls", logger, request, kwargs) as trace:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/httpcore2/_sync/socks_proxy.py 
new/httpcore2-2.13.1/httpcore2/_sync/socks_proxy.py
--- old/httpcore2-2.12.0/httpcore2/_sync/socks_proxy.py 2020-02-02 
01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/httpcore2/_sync/socks_proxy.py 2020-02-02 
01:00:00.000000000 +0100
@@ -242,7 +242,9 @@
                     # Upgrade the stream to SSL
                     if self._remote_origin.scheme in (b"https", b"wss"):
                         ssl_context = default_ssl_context() if 
self._ssl_context is None else self._ssl_context
-                        alpn_protocols = ["http/1.1", "h2"] if self._http2 
else ["http/1.1"]
+                        alpn_protocols = (
+                            (["h2", "http/1.1"] if self._http1 else ["h2"]) if 
self._http2 else ["http/1.1"]
+                        )
                         ssl_context.set_alpn_protocols(alpn_protocols)
 
                         kwargs = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/httpcore2/_utils.py 
new/httpcore2-2.13.1/httpcore2/_utils.py
--- old/httpcore2-2.12.0/httpcore2/_utils.py    2020-02-02 01:00:00.000000000 
+0100
+++ new/httpcore2-2.13.1/httpcore2/_utils.py    2020-02-02 01:00:00.000000000 
+0100
@@ -5,15 +5,14 @@
 import sys
 import typing
 from collections.abc import (
-    AsyncGenerator,
     AsyncIterable,
     AsyncIterator,
     Generator,
     Iterable,
     Iterator,
 )
-from contextlib import asynccontextmanager, contextmanager
-from inspect import isasyncgen
+from contextlib import AbstractAsyncContextManager, aclosing, contextmanager, 
nullcontext
+from types import AsyncGeneratorType
 
 T = typing.TypeVar("T")
 
@@ -48,18 +47,15 @@
     return bool(p.poll(0))
 
 
-@asynccontextmanager
-async def safe_async_iterate(
+def safe_async_iterate(
     iterable_or_iterator: AsyncIterable[T] | AsyncIterator[T], /
-) -> AsyncGenerator[AsyncIterator[T]]:
+) -> AbstractAsyncContextManager[AsyncIterator[T]]:
     iterator = (
         iterable_or_iterator if isinstance(iterable_or_iterator, 
AsyncIterator) else iterable_or_iterator.__aiter__()
     )
-    try:
-        yield iterator
-    finally:
-        if isasyncgen(iterator):
-            await iterator.aclose()
+    if isinstance(iterator, AsyncGeneratorType):
+        return aclosing(iterator)
+    return nullcontext(iterator)
 
 
 @contextmanager
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/httpcore2-2.12.0/pyproject.toml 
new/httpcore2-2.13.1/pyproject.toml
--- old/httpcore2-2.12.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/httpcore2-2.13.1/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -2,7 +2,7 @@
 requires = [
     "hatchling",
     "hatch-fancy-pypi-readme",
-    "uv-dynamic-versioning>=0.14.0",
+    "uv-dynamic-versioning>=0.14.1",
 ]
 build-backend = "hatchling.build"
 
@@ -49,7 +49,7 @@
 [project.optional-dependencies]
 http2 = ["h2>=3,<5"]
 socks = ["socksio==1.*"]
-trio = ["trio>=0.33.0,<1.0"]
+trio = ["trio>=0.34.0,<1.0"]
 asyncio = ["anyio>=4.5.0,<5.0"]
 
 [project.urls]

Reply via email to