diff --git a/community/py3-tornado/APKBUILD b/community/py3-tornado/APKBUILD index 129baf60226..fa163cec908 100644 --- a/community/py3-tornado/APKBUILD +++ b/community/py3-tornado/APKBUILD @@ -2,7 +2,7 @@ pkgname=py3-tornado _pkgname=tornado pkgver=6.4 -pkgrel=1 +pkgrel=2 pkgdesc="Python3 web framework and asynchronous networking library" options="!check" # 3 Tests fail by failure to resolve 'localhost' url="https://www.tornadoweb.org/" @@ -12,7 +12,9 @@ depends="python3" makedepends="python3-dev py3-gpep517 py3-setuptools py3-wheel" checkdepends="py3-curl py3-mock py3-twisted" subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" +source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz + fix-pytest-8.2-compat.patch + " builddir="$srcdir/$_pkgname-$pkgver" replaces="py-tornado" # Backwards compatibility @@ -39,4 +41,5 @@ package() { sha512sums=" c063509d4c385e410c63cccdc1e9c66aa2bb739473667ede56cb801b7379b910c8059dec831d609109f3076222b588b257afd960dffa422d7a872867dcdda7c7 tornado-6.4.tar.gz +4ceaf3ab5dcc1137c680ab482d712f1059dd4905bc9803c1a53f1aab3a56e45dd00d8c44ed2b2e1532d8a60343cf25056e9b872677e97167a6100abb589883e5 fix-pytest-8.2-compat.patch " diff --git a/community/py3-tornado/fix-pytest-8.2-compat.patch b/community/py3-tornado/fix-pytest-8.2-compat.patch new file mode 100644 index 00000000000..0ee44064b16 --- /dev/null +++ b/community/py3-tornado/fix-pytest-8.2-compat.patch @@ -0,0 +1,68 @@ +Patch-Source: https://github.com/tornadoweb/tornado/pull/3374 +-- +From c851aa8a949524b35f72c82b45a52353aa3c0558 Mon Sep 17 00:00:00 2001 +From: Ran Benita +Date: Sun, 28 Apr 2024 14:17:54 +0300 +Subject: [PATCH] testing: allow to instantiate an empty AsyncTestCase + +`unittest.TestCase` has a feature where it allows instantiating +`MyTestClass()` with the default method name `runTest` even if a +`runTest` method doesn't actually exist. This is documented in +`TestCase`'s docs under "Changed in version 3.2"[0]. + +Since version 8.2, pytest relies on this, and started breaking on +Tornado's `AsyncTestCase`[1]. + +Change `AsyncTestCase` to allow empty instatiation, by matching the +upstream code. + +[0] https://docs.python.org/3/library/unittest.html#unittest.TestCase +[1] https://github.com/pytest-dev/pytest/issues/12263 +--- + tornado/test/testing_test.py | 9 +++++++++ + tornado/testing.py | 12 +++++++++++- + 2 files changed, 20 insertions(+), 1 deletion(-) + +diff --git a/tornado/test/testing_test.py b/tornado/test/testing_test.py +index 0429feee83..8e2b8db428 100644 +--- a/tornado/test/testing_test.py ++++ b/tornado/test/testing_test.py +@@ -61,6 +61,15 @@ def test_subsequent_wait_calls(self): + self.io_loop.add_timeout(self.io_loop.time() + 0.2, self.stop) + self.wait(timeout=0.4) + ++ def test_empty_instantation_is_allowed(self): ++ """ ++ Test that empty instatiation of an AsyncTestCase is allowed. ++ ++ unittest.TestCase docs guarantee this working, and pytest's unittest ++ support relies on it. ++ """ ++ AsyncTestCaseTest() ++ + + class LeakTest(AsyncTestCase): + def tearDown(self): +diff --git a/tornado/testing.py b/tornado/testing.py +index bdbff87bc3..9455411a6d 100644 +--- a/tornado/testing.py ++++ b/tornado/testing.py +@@ -177,7 +177,17 @@ def __init__(self, methodName: str = "runTest") -> None: + # the test will silently be ignored because nothing will consume + # the generator. Replace the test method with a wrapper that will + # make sure it's not an undecorated generator. +- setattr(self, methodName, _TestMethodWrapper(getattr(self, methodName))) ++ try: ++ test_method = getattr(self, methodName) ++ except AttributeError: ++ if methodName != "runTest": ++ # We allow instantiation with no explicit method name ++ # but not an *incorrect* or missing method name. ++ raise ValueError( ++ "no such test method in %s: %s" % (self.__class__, methodName) ++ ) ++ else: ++ setattr(self, methodName, _TestMethodWrapper(test_method)) + + # Not used in this class itself, but used by @gen_test + self._test_generator = None # type: Optional[Union[Generator, Coroutine]]