) -> "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 "
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()
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
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())