From: Mike Bayer Date: Mon, 11 Dec 2023 15:55:25 +0000 (-0500) Subject: restore ValueError when greenlet not installed X-Git-Tag: rel_2_0_24~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9528b5977d97993df8c8fe47121ddb8a98dee95a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git restore ValueError when greenlet not installed continuing for #10747, add a test asserting we dont get an endless loop and get a clean ValueError instead when greenlet not installed and async functions are used. Fixes: #10747 Change-Id: I54dffe8577025e2ef3a59f5ca9ab7f4362d4d91f (cherry picked from commit 35a0854cae1e23271963e7781c65495e9c84f872) --- diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index 5d1f3fb166..4dd5176a3e 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -1609,6 +1609,18 @@ class SuiteRequirements(Requirements): def asyncio(self): return self.greenlet + @property + def no_greenlet(self): + def go(config): + try: + import greenlet # noqa: F401 + except ImportError: + return True + else: + return False + + return exclusions.only_if(go) + @property def greenlet(self): def go(config): diff --git a/test/base/test_concurrency_py3k.py b/test/base/test_concurrency_py3k.py index b4fb34d025..63a9f85080 100644 --- a/test/base/test_concurrency_py3k.py +++ b/test/base/test_concurrency_py3k.py @@ -264,3 +264,18 @@ class TestAsyncAdaptedQueue(fixtures.TestBase): t.join() is_true(run[0]) + + +class GracefulNoGreenletTest(fixtures.TestBase): + __requires__ = ("no_greenlet",) + + def test_await_only_graceful(self): + async def async_fn(): + pass + + with expect_raises_message( + ValueError, + "the greenlet library is required to use this " + "function. No module named 'greenlet'", + ): + await_only(async_fn())