commit: d1942257e55fe3751c6740439eb2d9695100c504 Author: Takuya Wakazono <pastalian46 <AT> gmail <DOT> com> AuthorDate: Sat Aug 9 07:03:59 2025 +0000 Commit: Takuya Wakazono <pastalian46 <AT> gmail <DOT> com> CommitDate: Sat Aug 9 07:03:59 2025 +0000 URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=d1942257
dev-python/backoff: new package, add 2.2.1 Upstream is dead. I'll maintain here until dev-util/mock migrates to another library. https://github.com/litl/backoff/issues/211 Signed-off-by: Takuya Wakazono <pastalian46 <AT> gmail.com> dev-python/backoff/Manifest | 1 + dev-python/backoff/backoff-2.2.1.ebuild | 39 ++++++++++ .../backoff-2.2.1-pytest-asyncio-compat.patch | 85 ++++++++++++++++++++++ dev-python/backoff/metadata.xml | 13 ++++ 4 files changed, 138 insertions(+) diff --git a/dev-python/backoff/Manifest b/dev-python/backoff/Manifest new file mode 100644 index 0000000000..3ce60acc86 --- /dev/null +++ b/dev-python/backoff/Manifest @@ -0,0 +1 @@ +DIST backoff-2.2.1.gh.tar.gz 20194 BLAKE2B a137ad67574b20535d5c29fad5781d0f7baaeeead23a5c8ccc3f1c48a952bf4436e75753e329861fb20bdc6fbe2b5e6d75b30d0fdca9908edfa540a593b3b353 SHA512 ed98c50d544d4ac3214b03005e5d183b0aeefd568c89769b59115ecc67ba7f7ea29a58e6ebf8488026a95ff2a1155e798782b04bebc9315c6a3682540bb38dff diff --git a/dev-python/backoff/backoff-2.2.1.ebuild b/dev-python/backoff/backoff-2.2.1.ebuild new file mode 100644 index 0000000000..c450f177d8 --- /dev/null +++ b/dev-python/backoff/backoff-2.2.1.ebuild @@ -0,0 +1,39 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=poetry +PYTHON_COMPAT=( python3_{11..14} ) + +inherit distutils-r1 + +DESCRIPTION="Function decoration for backoff and retry" +HOMEPAGE=" + https://github.com/litl/backoff/ + https://pypi.org/project/backoff/ +" +SRC_URI=" + https://github.com/litl/backoff/archive/v${PV}.tar.gz + -> ${P}.gh.tar.gz +" + +LICENSE="MIT" +SLOT="0" +KEYWORDS="~amd64" + +DOCS=( README.rst ) + +BDEPEND=" + test? ( + dev-python/requests[${PYTHON_USEDEP}] + dev-python/responses[${PYTHON_USEDEP}] + ) +" + +PATCHES=( + "${FILESDIR}/${P}-pytest-asyncio-compat.patch" +) + +EPYTEST_PLUGINS=( pytest-asyncio ) +distutils_enable_tests pytest diff --git a/dev-python/backoff/files/backoff-2.2.1-pytest-asyncio-compat.patch b/dev-python/backoff/files/backoff-2.2.1-pytest-asyncio-compat.patch new file mode 100644 index 0000000000..f9fae4696c --- /dev/null +++ b/dev-python/backoff/files/backoff-2.2.1-pytest-asyncio-compat.patch @@ -0,0 +1,85 @@ +https://github.com/litl/backoff/pull/224 +Adapt test cases to pytest-asyncio 1.0 compatibility + +- Remove deprecated event_loop fixture + https://pytest-asyncio.readthedocs.io/en/stable/reference/changelog.html#removed +- Drop *_without_event_loop tests + These incompatible tests (*1) are no longer needed since the + underlying code has already been removed (introduced in a460156, + removed in 5d714ccd). + +*1: asyncio.get_event_loop() now raises a RuntimeError in Python 3.14 + when no loop exists. + https://docs.python.org/3.14/whatsnew/3.14.html#id7 +--- a/tests/test_backoff_async.py ++++ b/tests/test_backoff_async.py +@@ -665,7 +665,7 @@ async def exceptor(): + + + @pytest.mark.asyncio +-async def test_on_exception_coro_cancelling(event_loop): ++async def test_on_exception_coro_cancelling(): + sleep_started_event = asyncio.Event() + + @backoff.on_predicate(backoff.expo) +@@ -679,59 +679,10 @@ async def coro(): + + return False + +- task = event_loop.create_task(coro()) ++ task = asyncio.create_task(coro()) + + await sleep_started_event.wait() + + task.cancel() + + assert (await task) +- +- +-def test_on_predicate_on_regular_function_without_event_loop(monkeypatch): +- monkeypatch.setattr('time.sleep', lambda x: None) +- +- # Set default event loop to None. +- loop = asyncio.get_event_loop() +- asyncio.set_event_loop(None) +- +- try: +- @backoff.on_predicate(backoff.expo) +- def return_true(log, n): +- val = (len(log) == n - 1) +- log.append(val) +- return val +- +- log = [] +- ret = return_true(log, 3) +- assert ret is True +- assert 3 == len(log) +- +- finally: +- # Restore event loop. +- asyncio.set_event_loop(loop) +- +- +-def test_on_exception_on_regular_function_without_event_loop(monkeypatch): +- monkeypatch.setattr('time.sleep', lambda x: None) +- +- # Set default event loop to None. +- loop = asyncio.get_event_loop() +- asyncio.set_event_loop(None) +- +- try: +- @backoff.on_exception(backoff.expo, KeyError) +- def keyerror_then_true(log, n): +- if len(log) == n: +- return True +- e = KeyError() +- log.append(e) +- raise e +- +- log = [] +- assert keyerror_then_true(log, 3) is True +- assert 3 == len(log) +- +- finally: +- # Restore event loop. +- asyncio.set_event_loop(loop) diff --git a/dev-python/backoff/metadata.xml b/dev-python/backoff/metadata.xml new file mode 100644 index 0000000000..e3c9a82769 --- /dev/null +++ b/dev-python/backoff/metadata.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>[email protected]</email> + <name>Takuya Wakazono</name> + </maintainer> + <stabilize-allarches/> + <upstream> + <remote-id type="github">litl/backoff</remote-id> + <remote-id type="pypi">backoff</remote-id> + </upstream> +</pkgmetadata>
