Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-httpcore for openSUSE:Factory checked in at 2024-04-03 17:18:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-httpcore (Old) and /work/SRC/openSUSE:Factory/.python-httpcore.new.1905 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-httpcore" Wed Apr 3 17:18:27 2024 rev:15 rq:1164272 version:1.0.5 Changes: -------- --- /work/SRC/openSUSE:Factory/python-httpcore/python-httpcore.changes 2024-03-25 21:08:09.645100525 +0100 +++ /work/SRC/openSUSE:Factory/.python-httpcore.new.1905/python-httpcore.changes 2024-04-03 17:18:44.689801730 +0200 @@ -1,0 +2,7 @@ +Wed Apr 3 07:04:47 UTC 2024 - Dirk Müller <dmuel...@suse.com> + +- update to 1.0.5: + * Handle `EndOfStream` exception for anyio backend. + * Allow trio `0.25.*` series in package dependancies. + +------------------------------------------------------------------- Old: ---- httpcore-1.0.4.tar.gz New: ---- httpcore-1.0.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-httpcore.spec ++++++ --- /var/tmp/diff_new_pack.uBxmW6/_old 2024-04-03 17:18:45.309824575 +0200 +++ /var/tmp/diff_new_pack.uBxmW6/_new 2024-04-03 17:18:45.309824575 +0200 @@ -27,7 +27,7 @@ %{?sle15_python_module_pythons} Name: python-httpcore%{psuffix} -Version: 1.0.4 +Version: 1.0.5 Release: 0 Summary: Minimal low-level Python HTTP client License: BSD-3-Clause ++++++ httpcore-1.0.4.tar.gz -> httpcore-1.0.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/CHANGELOG.md new/httpcore-1.0.5/CHANGELOG.md --- old/httpcore-1.0.4/CHANGELOG.md 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/CHANGELOG.md 2024-03-27 19:27:03.000000000 +0100 @@ -4,6 +4,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## 1.0.5 (March 27th, 2024) + +- Handle `EndOfStream` exception for anyio backend. (#899) +- Allow trio `0.25.*` series in package dependancies. (#903) + ## 1.0.4 (February 21st, 2024) - Add `target` request extension. (#888) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/httpcore/__init__.py new/httpcore-1.0.5/httpcore/__init__.py --- old/httpcore-1.0.4/httpcore/__init__.py 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/httpcore/__init__.py 2024-03-27 19:27:03.000000000 +0100 @@ -130,7 +130,7 @@ "WriteError", ] -__version__ = "1.0.4" +__version__ = "1.0.5" __locals = locals() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/httpcore/_async/http2.py new/httpcore-1.0.5/httpcore/_async/http2.py --- old/httpcore-1.0.4/httpcore/_async/http2.py 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/httpcore/_async/http2.py 2024-03-27 19:27:03.000000000 +0100 @@ -75,9 +75,9 @@ # Connection terminated events are stored as state since # we need to handle them for all streams. - self._connection_terminated: typing.Optional[ - h2.events.ConnectionTerminated - ] = None + self._connection_terminated: typing.Optional[h2.events.ConnectionTerminated] = ( + None + ) self._read_exception: typing.Optional[Exception] = None self._write_exception: typing.Optional[Exception] = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/httpcore/_backends/anyio.py new/httpcore-1.0.5/httpcore/_backends/anyio.py --- old/httpcore-1.0.4/httpcore/_backends/anyio.py 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/httpcore/_backends/anyio.py 2024-03-27 19:27:03.000000000 +0100 @@ -27,6 +27,7 @@ TimeoutError: ReadTimeout, anyio.BrokenResourceError: ReadError, anyio.ClosedResourceError: ReadError, + anyio.EndOfStream: ReadError, } with map_exceptions(exc_map): with anyio.fail_after(timeout): @@ -62,6 +63,7 @@ exc_map = { TimeoutError: ConnectTimeout, anyio.BrokenResourceError: ConnectError, + anyio.EndOfStream: ConnectError, } with map_exceptions(exc_map): try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/httpcore/_models.py new/httpcore-1.0.5/httpcore/_models.py --- old/httpcore-1.0.4/httpcore/_models.py 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/httpcore/_models.py 2024-03-27 19:27:03.000000000 +0100 @@ -339,7 +339,7 @@ url: The request URL, either as a `URL` instance, or as a string or bytes. For example: `"https://www.example.com".` headers: The HTTP request headers. - content: The content of the response body. + content: The content of the request body. extensions: A dictionary of optional extra information included on the request. Possible keys include `"timeout"`, and `"trace"`. """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/httpcore/_sync/http2.py new/httpcore-1.0.5/httpcore/_sync/http2.py --- old/httpcore-1.0.4/httpcore/_sync/http2.py 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/httpcore/_sync/http2.py 2024-03-27 19:27:03.000000000 +0100 @@ -75,9 +75,9 @@ # Connection terminated events are stored as state since # we need to handle them for all streams. - self._connection_terminated: typing.Optional[ - h2.events.ConnectionTerminated - ] = None + self._connection_terminated: typing.Optional[h2.events.ConnectionTerminated] = ( + None + ) self._read_exception: typing.Optional[Exception] = None self._write_exception: typing.Optional[Exception] = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/pyproject.toml new/httpcore-1.0.5/pyproject.toml --- old/httpcore-1.0.4/pyproject.toml 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/pyproject.toml 2024-03-27 19:27:03.000000000 +0100 @@ -41,7 +41,7 @@ "socksio==1.*", ] trio = [ - "trio>=0.22.0,<0.25.0", + "trio>=0.22.0,<0.26.0", ] asyncio = [ "anyio>=4.0,<5.0", @@ -106,16 +106,12 @@ "httpcore/_sync", "tests/_sync", ] -line-length = 88 -select = [ - "E", - "F", - "W", - "I" -] -[tool.ruff.pycodestyle] +[tool.ruff.lint] +select = ["E", "F", "W", "I"] + +[tool.ruff.lint.pycodestyle] max-line-length = 120 -[tool.ruff.isort] +[tool.ruff.lint.isort] combine-as-imports = true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/requirements.txt new/httpcore-1.0.5/requirements.txt --- old/httpcore-1.0.4/requirements.txt 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/requirements.txt 2024-03-27 19:27:03.000000000 +0100 @@ -2,23 +2,23 @@ # Docs mkdocs==1.5.3 -mkdocs-autorefs==0.5.0 -mkdocs-material==9.5.10 +mkdocs-autorefs==1.0.1 +mkdocs-material==9.5.12 mkdocs-material-extensions==1.3.1 -mkdocstrings[python-legacy]==0.24.0 +mkdocstrings[python-legacy]==0.24.1 jinja2==3.1.3 # Packaging -build==1.0.3 +build==1.1.1 twine # Tests & Linting -coverage[toml]==7.4.1 -ruff==0.2.2 +coverage[toml]==7.4.3 +ruff==0.3.0 mypy==1.8.0 trio-typing==0.10.0 types-certifi==2021.10.8.3 -pytest==8.0.1 +pytest==8.0.2 pytest-httpbin==2.0.0 pytest-trio==0.8.0 werkzeug<2.1 # See: https://github.com/postmanlabs/httpbin/issues/673 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/scripts/check new/httpcore-1.0.5/scripts/check --- old/httpcore-1.0.4/scripts/check 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/scripts/check 2024-03-27 19:27:03.000000000 +0100 @@ -8,7 +8,7 @@ set -x -${PREFIX}ruff check --show-source $SOURCE_FILES ${PREFIX}ruff format $SOURCE_FILES --diff ${PREFIX}mypy $SOURCE_FILES -scripts/unasync --check +${PREFIX}ruff check $SOURCE_FILES +${PREFIX}python scripts/unasync.py --check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/scripts/lint new/httpcore-1.0.5/scripts/lint --- old/httpcore-1.0.4/scripts/lint 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/scripts/lint 2024-03-27 19:27:03.000000000 +0100 @@ -13,4 +13,4 @@ # Run unasync last because its `--check` mode is not aware of code formatters. # (This means sync code isn't prettified, and that's mostly okay.) -scripts/unasync +${PREFIX}python scripts/unasync.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/scripts/unasync new/httpcore-1.0.5/scripts/unasync --- old/httpcore-1.0.4/scripts/unasync 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/scripts/unasync 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -#!/bin/sh -e - -export PREFIX="" -if [ -d 'venv' ] ; then - export PREFIX="venv/bin/" -fi - -${PREFIX}python unasync.py ${@} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/scripts/unasync.py new/httpcore-1.0.5/scripts/unasync.py --- old/httpcore-1.0.4/scripts/unasync.py 1970-01-01 01:00:00.000000000 +0100 +++ new/httpcore-1.0.5/scripts/unasync.py 2024-03-27 19:27:03.000000000 +0100 @@ -0,0 +1,94 @@ +#!venv/bin/python +import os +import re +import sys +from pprint import pprint + +SUBS = [ + ('from .._backends.auto import AutoBackend', 'from .._backends.sync import SyncBackend'), + ('import trio as concurrency', 'from tests import concurrency'), + ('AsyncIterator', 'Iterator'), + ('Async([A-Z][A-Za-z0-9_]*)', r'\2'), + ('async def', 'def'), + ('async with', 'with'), + ('async for', 'for'), + ('await ', ''), + ('handle_async_request', 'handle_request'), + ('aclose', 'close'), + ('aiter_stream', 'iter_stream'), + ('aread', 'read'), + ('asynccontextmanager', 'contextmanager'), + ('__aenter__', '__enter__'), + ('__aexit__', '__exit__'), + ('__aiter__', '__iter__'), + ('@pytest.mark.anyio', ''), + ('@pytest.mark.trio', ''), + ('AutoBackend', 'SyncBackend'), +] +COMPILED_SUBS = [ + (re.compile(r'(^|\b)' + regex + r'($|\b)'), repl) + for regex, repl in SUBS +] + +USED_SUBS = set() + +def unasync_line(line): + for index, (regex, repl) in enumerate(COMPILED_SUBS): + old_line = line + line = re.sub(regex, repl, line) + if old_line != line: + USED_SUBS.add(index) + return line + + +def unasync_file(in_path, out_path): + with open(in_path, "r") as in_file: + with open(out_path, "w", newline="") as out_file: + for line in in_file.readlines(): + line = unasync_line(line) + out_file.write(line) + + +def unasync_file_check(in_path, out_path): + with open(in_path, "r") as in_file: + with open(out_path, "r") as out_file: + for in_line, out_line in zip(in_file.readlines(), out_file.readlines()): + expected = unasync_line(in_line) + if out_line != expected: + print(f'unasync mismatch between {in_path!r} and {out_path!r}') + print(f'Async code: {in_line!r}') + print(f'Expected sync code: {expected!r}') + print(f'Actual sync code: {out_line!r}') + sys.exit(1) + + +def unasync_dir(in_dir, out_dir, check_only=False): + for dirpath, dirnames, filenames in os.walk(in_dir): + for filename in filenames: + if not filename.endswith('.py'): + continue + rel_dir = os.path.relpath(dirpath, in_dir) + in_path = os.path.normpath(os.path.join(in_dir, rel_dir, filename)) + out_path = os.path.normpath(os.path.join(out_dir, rel_dir, filename)) + print(in_path, '->', out_path) + if check_only: + unasync_file_check(in_path, out_path) + else: + unasync_file(in_path, out_path) + + +def main(): + check_only = '--check' in sys.argv + unasync_dir("httpcore/_async", "httpcore/_sync", check_only=check_only) + unasync_dir("tests/_async", "tests/_sync", check_only=check_only) + + if len(USED_SUBS) != len(SUBS): + unused_subs = [SUBS[i] for i in range(len(SUBS)) if i not in USED_SUBS] + + print("These patterns were not used:") + pprint(unused_subs) + exit(1) + + +if __name__ == '__main__': + main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/tests/concurrency.py new/httpcore-1.0.5/tests/concurrency.py --- old/httpcore-1.0.4/tests/concurrency.py 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/tests/concurrency.py 2024-03-27 19:27:03.000000000 +0100 @@ -8,6 +8,7 @@ We don't do any smarts around cancellations, or managing exceptions from childen, because we don't need that for our use-case. """ + import threading from types import TracebackType from typing import Any, Callable, List, Optional, Type diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/httpcore-1.0.4/unasync.py new/httpcore-1.0.5/unasync.py --- old/httpcore-1.0.4/unasync.py 2024-02-21 14:00:25.000000000 +0100 +++ new/httpcore-1.0.5/unasync.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,94 +0,0 @@ -#!venv/bin/python -import os -import re -import sys -from pprint import pprint - -SUBS = [ - ('from .._backends.auto import AutoBackend', 'from .._backends.sync import SyncBackend'), - ('import trio as concurrency', 'from tests import concurrency'), - ('AsyncIterator', 'Iterator'), - ('Async([A-Z][A-Za-z0-9_]*)', r'\2'), - ('async def', 'def'), - ('async with', 'with'), - ('async for', 'for'), - ('await ', ''), - ('handle_async_request', 'handle_request'), - ('aclose', 'close'), - ('aiter_stream', 'iter_stream'), - ('aread', 'read'), - ('asynccontextmanager', 'contextmanager'), - ('__aenter__', '__enter__'), - ('__aexit__', '__exit__'), - ('__aiter__', '__iter__'), - ('@pytest.mark.anyio', ''), - ('@pytest.mark.trio', ''), - ('AutoBackend', 'SyncBackend'), -] -COMPILED_SUBS = [ - (re.compile(r'(^|\b)' + regex + r'($|\b)'), repl) - for regex, repl in SUBS -] - -USED_SUBS = set() - -def unasync_line(line): - for index, (regex, repl) in enumerate(COMPILED_SUBS): - old_line = line - line = re.sub(regex, repl, line) - if old_line != line: - USED_SUBS.add(index) - return line - - -def unasync_file(in_path, out_path): - with open(in_path, "r") as in_file: - with open(out_path, "w", newline="") as out_file: - for line in in_file.readlines(): - line = unasync_line(line) - out_file.write(line) - - -def unasync_file_check(in_path, out_path): - with open(in_path, "r") as in_file: - with open(out_path, "r") as out_file: - for in_line, out_line in zip(in_file.readlines(), out_file.readlines()): - expected = unasync_line(in_line) - if out_line != expected: - print(f'unasync mismatch between {in_path!r} and {out_path!r}') - print(f'Async code: {in_line!r}') - print(f'Expected sync code: {expected!r}') - print(f'Actual sync code: {out_line!r}') - sys.exit(1) - - -def unasync_dir(in_dir, out_dir, check_only=False): - for dirpath, dirnames, filenames in os.walk(in_dir): - for filename in filenames: - if not filename.endswith('.py'): - continue - rel_dir = os.path.relpath(dirpath, in_dir) - in_path = os.path.normpath(os.path.join(in_dir, rel_dir, filename)) - out_path = os.path.normpath(os.path.join(out_dir, rel_dir, filename)) - print(in_path, '->', out_path) - if check_only: - unasync_file_check(in_path, out_path) - else: - unasync_file(in_path, out_path) - - -def main(): - check_only = '--check' in sys.argv - unasync_dir("httpcore/_async", "httpcore/_sync", check_only=check_only) - unasync_dir("tests/_async", "tests/_sync", check_only=check_only) - - if len(USED_SUBS) != len(SUBS): - unused_subs = [SUBS[i] for i in range(len(SUBS)) if i not in USED_SUBS] - - print("These patterns were not used:") - pprint(unused_subs) - exit(1) - - -if __name__ == '__main__': - main()