--- /dev/null
+.. change::
+ :tags: bug, general
+ :tickets: 6540, 6543
+
+ Resolved various deprecation warnings which were appearing as of Python
+ version 3.10.0b1.
# some selected deprecations...
warnings.filterwarnings("error", category=DeprecationWarning)
warnings.filterwarnings(
- "ignore", category=DeprecationWarning, message=".*StopIteration"
+ "ignore", category=DeprecationWarning, message=r".*StopIteration"
)
warnings.filterwarnings(
- "ignore", category=DeprecationWarning, message=".*inspect.get.*argspec"
+ "ignore",
+ category=DeprecationWarning,
+ message=r".*inspect.get.*argspec",
+ )
+
+ # used by pytest-xdist
+ warnings.filterwarnings(
+ "ignore",
+ category=DeprecationWarning,
+ message=r".*isSet\(\) is deprecated, use is_set\(\).*",
)
warnings.filterwarnings(
"ignore",
# this is called in the context greenlet while running fn
current = greenlet.getcurrent()
if not isinstance(current, _AsyncIoGreenlet):
- loop = asyncio.get_event_loop()
+ loop = get_event_loop()
if loop.is_running():
raise exc.MissingGreenlet(
"greenlet_spawn has not been called and asyncio event "
def _util_async_run_coroutine_function(fn, *args, **kwargs):
"""for test suite/ util only"""
- loop = asyncio.get_event_loop()
+ loop = get_event_loop()
if loop.is_running():
raise Exception(
"for async run coroutine we expect that no greenlet or event "
def _util_async_run(fn, *args, **kwargs):
"""for test suite/ util only"""
- loop = asyncio.get_event_loop()
+ loop = get_event_loop()
if not loop.is_running():
return loop.run_until_complete(greenlet_spawn(fn, *args, **kwargs))
else:
# allow for a wrapped test function to call another
assert isinstance(greenlet.getcurrent(), _AsyncIoGreenlet)
return fn(*args, **kwargs)
+
+
+def get_event_loop():
+ """vendor asyncio.get_event_loop() for python 3.7 and above.
+
+ Python 3.10 deprecates get_event_loop() as a standalone.
+
+ """
+ if compat.py37:
+ try:
+ return asyncio.get_running_loop()
+ except RuntimeError:
+ return asyncio.get_event_loop_policy().get_event_loop()
+ else:
+ return asyncio.get_event_loop()
import platform
import sys
-
+py310 = sys.version_info >= (3, 10)
py38 = sys.version_info >= (3, 8)
py37 = sys.version_info >= (3, 7)
py3k = sys.version_info >= (3, 0)
if py38:
from importlib import metadata as importlib_metadata
-
- def importlib_metadata_get(group):
- return importlib_metadata.entry_points().get(group, ())
-
-
else:
import importlib_metadata # noqa
- def importlib_metadata_get(group):
- ep = importlib_metadata.entry_points()
- if hasattr(ep, "select"):
- return ep.select(group=group)
- else:
- return ep.get(group, ())
+
+def importlib_metadata_get(group):
+ ep = importlib_metadata.entry_points()
+ if hasattr(ep, "select"):
+ return ep.select(group=group)
+ else:
+ return ep.get(group, ())
if py3k:
from sqlalchemy.util import asyncio
from sqlalchemy.util import await_fallback
from sqlalchemy.util import await_only
+from sqlalchemy.util import compat
from sqlalchemy.util import greenlet_spawn
from sqlalchemy.util import queue
eq_(q.get(block=False), 1)
q.get(timeout=0.1)
- with expect_raises_message(
- RuntimeError, "Task .* attached to a different loop"
- ):
- asyncio.run(greenlet_spawn(go))
+ if compat.py310:
+ # TODO: I don't really know what this means in 3.10
+ with expect_raises(queue.Empty):
+ asyncio.run(greenlet_spawn(go))
+ else:
+ with expect_raises_message(
+ RuntimeError, "Task .* attached to a different loop"
+ ):
+ asyncio.run(greenlet_spawn(go))
run[0] = True
sqlite: .[aiosqlite]
sqlite_file: .[aiosqlite]
- sqlite_file: .[sqlcipher]; python_version >= '3'
+ sqlite_file: .[sqlcipher]; python_version >= '3' and python_version < '3.10'
postgresql: .[postgresql]
postgresql: .[postgresql_asyncpg]; python_version >= '3'
postgresql: .[postgresql_pg8000]; python_version >= '3'
sqlite: SQLITE={env:TOX_SQLITE:--db sqlite}
sqlite_file: SQLITE={env:TOX_SQLITE_FILE:--db sqlite_file}
py3{,5,6,7,8,9,10,11}-sqlite: EXTRA_SQLITE_DRIVERS={env:EXTRA_SQLITE_DRIVERS:--dbdriver sqlite --dbdriver aiosqlite}
- py3{,5,6,7,8,9,10,11}-sqlite_file: EXTRA_SQLITE_DRIVERS={env:EXTRA_SQLITE_DRIVERS:--dbdriver sqlite --dbdriver aiosqlite --dbdriver pysqlcipher}
+ py3{,5,6,7,8,9}-sqlite_file: EXTRA_SQLITE_DRIVERS={env:EXTRA_SQLITE_DRIVERS:--dbdriver sqlite --dbdriver aiosqlite --dbdriver pysqlcipher}
+ # omit pysqlcipher for Python 3.10
+ py3{,10,11}-sqlite_file: EXTRA_SQLITE_DRIVERS={env:EXTRA_SQLITE_DRIVERS:--dbdriver sqlite --dbdriver aiosqlite}
postgresql: POSTGRESQL={env:TOX_POSTGRESQL:--db postgresql}
py2{,7}-postgresql: POSTGRESQL={env:TOX_POSTGRESQL_PY2K:{env:TOX_POSTGRESQL:--db postgresql}}
mysql: MYSQL={env:TOX_MYSQL:--db mysql}
py2{,7}-mysql: MYSQL={env:TOX_MYSQL_PY2K:{env:TOX_MYSQL:--db mysql}}
mysql: EXTRA_MYSQL_DRIVERS={env:EXTRA_MYSQL_DRIVERS:--dbdriver mysqldb --dbdriver pymysql}
- py3{,5,6,7,8,9,10,11}-mysql: EXTRA_MYSQL_DRIVERS={env:EXTRA_MYSQL_DRIVERS:--dbdriver mysqldb --dbdriver pymysql --dbdriver mariadbconnector --dbdriver aiomysql}
+
+ py3{,5,6,7,8,9}-mysql: EXTRA_MYSQL_DRIVERS={env:EXTRA_MYSQL_DRIVERS:--dbdriver mysqldb --dbdriver pymysql --dbdriver mariadbconnector --dbdriver aiomysql}
+ # omit aiomysql for Python 3.10
+ py3{,10,11}-mysql: EXTRA_MYSQL_DRIVERS={env:EXTRA_MYSQL_DRIVERS:--dbdriver mysqldb --dbdriver pymysql --dbdriver mariadbconnector}
mssql: MSSQL={env:TOX_MSSQL:--db mssql}