]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
restore ValueError when greenlet not installed
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 11 Dec 2023 15:55:25 +0000 (10:55 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 11 Dec 2023 16:01:45 +0000 (11:01 -0500)
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)

lib/sqlalchemy/testing/requirements.py
test/base/test_concurrency_py3k.py

index 5d1f3fb1663958a96e974d280c765d571e71a508..4dd5176a3ee4f6848994a8fb156a6aa06e4c4c2e 100644 (file)
@@ -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):
index b4fb34d0259a5d35ecbd965f6c2c0f17cf1b6ea7..63a9f8508009ef56fa582dc1adb03576719fced6 100644 (file)
@@ -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())