diff options
author | Michał Górny <mgorny@gentoo.org> | 2024-06-14 18:04:19 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2024-06-14 18:04:34 +0200 |
commit | 8a6a59973731fca69b98b12d9d169f082e9b2734 (patch) | |
tree | e91b1afc59e913d946299c0bf3d17a6c894b219f /dev-python/anyio | |
parent | dev-python/starlette: Enable py3.13 (diff) | |
download | gentoo-8a6a59973731fca69b98b12d9d169f082e9b2734.tar.gz gentoo-8a6a59973731fca69b98b12d9d169f082e9b2734.tar.bz2 gentoo-8a6a59973731fca69b98b12d9d169f082e9b2734.zip |
dev-python/anyio: Backport a py3.13 patch & enable trio testing
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'dev-python/anyio')
-rw-r--r-- | dev-python/anyio/anyio-4.4.0-r1.ebuild | 87 | ||||
-rw-r--r-- | dev-python/anyio/files/anyio-4.4.0-py313.patch | 90 |
2 files changed, 177 insertions, 0 deletions
diff --git a/dev-python/anyio/anyio-4.4.0-r1.ebuild b/dev-python/anyio/anyio-4.4.0-r1.ebuild new file mode 100644 index 000000000000..089ffcd3b09d --- /dev/null +++ b/dev-python/anyio/anyio-4.4.0-r1.ebuild @@ -0,0 +1,87 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYTHON_COMPAT=( pypy3 python3_{10..13} ) + +inherit distutils-r1 pypi + +DESCRIPTION="Compatibility layer for multiple asynchronous event loop implementations" +HOMEPAGE=" + https://github.com/agronholm/anyio/ + https://pypi.org/project/anyio/ +" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" + +RDEPEND=" + >=dev-python/idna-2.8[${PYTHON_USEDEP}] + >=dev-python/sniffio-1.1[${PYTHON_USEDEP}] + $(python_gen_cond_dep ' + >=dev-python/exceptiongroup-1.2.0[${PYTHON_USEDEP}] + >=dev-python/typing-extensions-4.1[${PYTHON_USEDEP}] + ' 3.10) +" +# On amd64, let's get more test coverage by dragging in uvloop, but let's +# not bother on other arches where uvloop may not be supported. +BDEPEND=" + >=dev-python/setuptools-scm-6.4[${PYTHON_USEDEP}] + test? ( + >=dev-python/exceptiongroup-1.2.0[${PYTHON_USEDEP}] + >=dev-python/hypothesis-4.0[${PYTHON_USEDEP}] + >=dev-python/psutil-5.9[${PYTHON_USEDEP}] + >=dev-python/pytest-mock-3.6.1[${PYTHON_USEDEP}] + dev-python/trustme[${PYTHON_USEDEP}] + $(python_gen_cond_dep ' + >=dev-python/trio-0.23[${PYTHON_USEDEP}] + ' 3.{10..13}) + amd64? ( + $(python_gen_cond_dep ' + >=dev-python/uvloop-0.17[${PYTHON_USEDEP}] + ' python3_{10..12}) + ) + ) +" + +distutils_enable_tests pytest +distutils_enable_sphinx docs \ + '>=dev-python/sphinx-rtd-theme-1.2.2' \ + dev-python/sphinxcontrib-jquery \ + dev-python/sphinx-autodoc-typehints + +PATCHES=( + # https://github.com/agronholm/anyio/pull/740 + "${FILESDIR}/${P}-py313.patch" +) + +python_test() { + local EPYTEST_DESELECT=( + # requires link-local IPv6 interface + tests/test_sockets.py::TestTCPListener::test_bind_link_local + ) + + local filter=() + if ! has_version ">=dev-python/trio-0.23[${PYTHON_USEDEP}]"; then + filter+=( -k "not trio" ) + EPYTEST_DESELECT+=( + tests/test_pytest_plugin.py::test_plugin + tests/test_pytest_plugin.py::test_autouse_async_fixture + tests/test_pytest_plugin.py::test_cancel_scope_in_asyncgen_fixture + ) + fi + + case ${EPYTHON} in + python3.13) + EPYTEST_DESELECT+=( + 'tests/test_fileio.py::TestPath::test_properties[asyncio]' + ) + ;; + esac + + local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 + epytest -m 'not network' "${filter[@]}" +} diff --git a/dev-python/anyio/files/anyio-4.4.0-py313.patch b/dev-python/anyio/files/anyio-4.4.0-py313.patch new file mode 100644 index 000000000000..ebd3763f7544 --- /dev/null +++ b/dev-python/anyio/files/anyio-4.4.0-py313.patch @@ -0,0 +1,90 @@ +From 8a4d651610abb71da66cef58f350788eab6b0bd1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alex=20Gr=C3=B6nholm?= <alex.gronholm@nextday.fi> +Date: Tue, 28 May 2024 01:00:49 +0300 +Subject: [PATCH 1/3] Added missing Path properties from Python 3.13 + +Fixes #737. +--- + src/anyio/_core/_fileio.py | 24 ++++++++++++++++++++++-- + tests/test_fileio.py | 18 ++++++++++++++++++ + 4 files changed, 47 insertions(+), 4 deletions(-) + +diff --git a/src/anyio/_core/_fileio.py b/src/anyio/_core/_fileio.py +index df2057fe..8053dce5 100644 +--- a/src/anyio/_core/_fileio.py ++++ b/src/anyio/_core/_fileio.py +@@ -358,8 +358,28 @@ def as_posix(self) -> str: + def as_uri(self) -> str: + return self._path.as_uri() + +- def match(self, path_pattern: str) -> bool: +- return self._path.match(path_pattern) ++ if sys.version_info >= (3, 13): ++ parser = pathlib.Path.parser # type: ignore[attr-defined] ++ ++ @classmethod ++ def from_uri(cls, uri: str) -> Path: ++ return Path(pathlib.Path.from_uri(uri)) # type: ignore[attr-defined] ++ ++ def full_match( ++ self, path_pattern: str, *, case_sensitive: bool | None = None ++ ) -> bool: ++ return self._path.full_match( # type: ignore[attr-defined] ++ path_pattern, case_sensitive=case_sensitive ++ ) ++ ++ def match( ++ self, path_pattern: str, *, case_sensitive: bool | None = None ++ ) -> bool: ++ return self._path.match(path_pattern, case_sensitive=case_sensitive) ++ else: ++ ++ def match(self, path_pattern: str) -> bool: ++ return self._path.match(path_pattern) + + def is_relative_to(self, other: str | PathLike[str]) -> bool: + try: +diff --git a/tests/test_fileio.py b/tests/test_fileio.py +index bcd7fe1d..ff9178e0 100644 +--- a/tests/test_fileio.py ++++ b/tests/test_fileio.py +@@ -186,6 +186,15 @@ def test_as_uri(self) -> None: + else: + assert Path("/foo/bar").as_uri() == "file:///foo/bar" + ++ @pytest.mark.skipif( ++ sys.version_info < (3, 13), ++ reason="Path.from_uri() is only available on Python 3.13+", ++ ) ++ def test_from_uri(self) -> None: ++ path = Path.from_uri("file:///foo/bar") ++ assert isinstance(path, Path) ++ assert path.as_uri() == "file:///foo/bar" ++ + async def test_cwd(self) -> None: + result = await Path.cwd() + assert isinstance(result, Path) +@@ -269,6 +278,7 @@ async def test_is_mount(self) -> None: + assert not await Path("/gfobj4ewiotj").is_mount() + assert await Path("/").is_mount() + ++ @pytest.mark.filterwarnings("ignore::DeprecationWarning") + def test_is_reserved(self) -> None: + expected_result = platform.system() == "Windows" + assert Path("nul").is_reserved() == expected_result +@@ -339,6 +349,14 @@ def test_joinpath(self) -> None: + path = Path("/foo").joinpath("bar") + assert path == Path("/foo/bar") + ++ @pytest.mark.skipif( ++ sys.version_info < (3, 13), ++ reason="Path.full_match() is only available on Python 3.13+", ++ ) ++ def test_fullmatch(self) -> None: ++ assert Path("/foo/bar").full_match("/foo/*") ++ assert not Path("/foo/bar").full_match("/baz/*") ++ + def test_match(self) -> None: + assert Path("/foo/bar").match("/foo/*") + assert not Path("/foo/bar").match("/baz/*") + |