From 9e15659191bbd3dd6c59d4a6e5aa2bfa877c17ca Mon Sep 17 00:00:00 2001 From: Federico Caselli Date: Mon, 27 Sep 2021 22:39:31 +0200 Subject: [PATCH] Support py36, test exception --- psycopg/psycopg/connection_async.py | 5 ++++- tests/conftest.py | 12 ++++++++++-- tests/test_connection_async.py | 17 ++++++++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/psycopg/psycopg/connection_async.py b/psycopg/psycopg/connection_async.py index 27faf9b42..97d3d5c89 100644 --- a/psycopg/psycopg/connection_async.py +++ b/psycopg/psycopg/connection_async.py @@ -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 " diff --git a/tests/conftest.py b/tests/conftest.py index c9d8d790d..ca1295e76 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -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() diff --git a/tests/test_connection_async.py b/tests/test_connection_async.py index 1e5dbda15..eee637af9 100644 --- a/tests/test_connection_async.py +++ b/tests/test_connection_async.py @@ -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()) -- 2.47.2