]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Support py36, test exception 84/head
authorFederico Caselli <cfederico87@gmail.com>
Mon, 27 Sep 2021 20:39:31 +0000 (22:39 +0200)
committerFederico Caselli <cfederico87@gmail.com>
Tue, 28 Sep 2021 19:18:16 +0000 (21:18 +0200)
psycopg/psycopg/connection_async.py
tests/conftest.py
tests/test_connection_async.py

index 27faf9b42d4a5b97fa18d5277b9171ce5b8f0afb..97d3d5c894a32df6a5017c3ef25e8fe63eef9105 100644 (file)
@@ -93,7 +93,10 @@ class AsyncConnection(BaseConnection[Row]):
     ) -> "AsyncConnection[Any]":
 
         if sys.platform == "win32":
-            loop = asyncio.get_running_loop()
+            if sys.version_info < (3, 7):
+                loop = asyncio.get_event_loop()
+            else:
+                loop = asyncio.get_running_loop()
             if isinstance(loop, asyncio.ProactorEventLoop):
                 raise e.InterfaceError(
                     "psycopg does not currently support running in async mode "
index c9d8d790de419a677a74faf1e7390ffa2531e4b0..ca1295e76a1e4886d72f65e8d62bd4b5d9e3470f 100644 (file)
@@ -87,8 +87,16 @@ def event_loop(request):
     else:
         assert loop == "default"
 
+    loop = None
     if sys.platform == "win32":
-        asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
-    loop = asyncio.get_event_loop_policy().new_event_loop()
+        if sys.version_info < (3, 7):
+            loop = asyncio.SelectorEventLoop()
+            asyncio.set_event_loop(loop)
+        else:
+            asyncio.set_event_loop_policy(
+                asyncio.WindowsSelectorEventLoopPolicy()
+            )
+    if not loop:
+        loop = asyncio.get_event_loop_policy().new_event_loop()
     yield loop
     loop.close()
index 1e5dbda152ebd15ce86fa15c8a9463e7eb13c3ac..eee637af95f2a825cac9df7164a63bbaee46dda9 100644 (file)
@@ -3,12 +3,13 @@ import socket
 import pytest
 import asyncio
 import logging
+import sys
 import weakref
 
 import psycopg
 from psycopg import AsyncConnection, Notify
 from psycopg.rows import tuple_row
-from psycopg.errors import UndefinedTable
+from psycopg.errors import InterfaceError, UndefinedTable
 from psycopg.conninfo import conninfo_to_dict, make_conninfo
 
 from .utils import gc_collect
@@ -668,3 +669,17 @@ async def test_connect_context_copy(dsn, aconn):
     assert (await cur.fetchone())[0] == "hellot"
     cur = await aconn2.execute("select %b", ["hello"])
     assert (await cur.fetchone())[0] == "hellob"
+
+
+@pytest.mark.skipif(sys.platform != "win32", reason="windows is required")
+def test_windows_error(dsn):
+    loop = asyncio.ProactorEventLoop()
+
+    async def go():
+        with pytest.raises(
+            InterfaceError,
+            match="psycopg does not currently support running in async mode",
+        ):
+            await psycopg.AsyncConnection.connect(dsn)
+
+    loop.run_until_complete(go())