Thanks, Mike. CockroachDBDialect_asyncpg subclasses PGDialect_asyncpg so I figured that it would inherit the is_async setting, and it appears that it does (see below).
class CockroachDBDialect_asyncpg(PGDialect_asyncpg, CockroachDBDialect):
I added a couple of breakpoints to verify:
(venv) gord@gord-HP-studio:~/git/sqlalchemy-cockroachdb$ pytest --db=async test/test_suite_sqlalchemy.py -k "BooleanTest and test_null"
============================================================================================== test session starts ===============================================================================================
platform linux -- Python 3.9.7, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 -- /home/gord/git/sqlalchemy-cockroachdb/venv/bin/python
cachedir: .pytest_cache
rootdir: /home/gord/git/sqlalchemy-cockroachdb, configfile: setup.cfg
collecting ...
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/suite/test_types.py(718)BooleanTest()
-> __backend__ = True
(Pdb) config.any_async
True
(Pdb) config.db.dialect
<sqlalchemy_cockroachdb.asyncpg.CockroachDBDialect_asyncpg object at 0x7f30750c6be0>
(Pdb) config.db.dialect.is_async
True
(Pdb) c
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB continue (IO-capturing resumed) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
collected 531 items / 530 deselected / 1 selected
test/test_suite_sqlalchemy.py::BooleanTest_cockroachdb+asyncpg_9_5_0::test_null
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/asyncio.py(85)_maybe_async()
-> if not ENABLE_ASYNCIO:
(Pdb) ENABLE_ASYNCIO
False
(Pdb) c
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB continue (IO-capturing resumed) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ERROR [100%]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB set_trace (IO-capturing turned off) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> /home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/asyncio.py(85)_maybe_async()
-> if not ENABLE_ASYNCIO:
(Pdb) ENABLE_ASYNCIO
False
(Pdb) c
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> PDB continue (IO-capturing resumed) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
/home/gord/git/sqla-gerrit/lib/sqlalchemy/pool/base.py:249: RuntimeWarning: coroutine 'Connection.close' was never awaited
self.logger.error(
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
===================================================================================================== ERRORS =====================================================================================================
_______________________________________________________________________ ERROR at setup of BooleanTest_cockroachdb+asyncpg_9_5_0.test_null ________________________________________________________________________
Traceback (most recent call last):
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/asyncio.py", line 119, in wrap_fixture
value = _maybe_async(call_next, gen)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/asyncio.py", line 85, in _maybe_async
if not ENABLE_ASYNCIO:
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/asyncio.py", line 110, in call_next
return next(gen)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/fixtures.py", line 359, in _setup_tables_test_class
cls._setup_once_tables()
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/testing/fixtures.py", line 406, in _setup_once_tables
cls._tables_metadata.create_all(cls.bind)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/sql/schema.py", line 4785, in create_all
bind._run_ddl_visitor(
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/base.py", line 3107, in _run_ddl_visitor
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/base.py", line 2110, in _run_ddl_visitor
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/sql/visitors.py", line 524, in traverse_single
return meth(obj, **kw)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/sql/ddl.py", line 823, in visit_metadata
[t for t in tables if self._can_create_table(t)]
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/sql/ddl.py", line 823, in <listcomp>
[t for t in tables if self._can_create_table(t)]
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/sql/ddl.py", line 788, in _can_create_table
return not self.checkfirst or not self.dialect.has_table(
File "/home/gord/git/sqlalchemy-cockroachdb/sqlalchemy_cockroachdb/base.py", line 189, in has_table
return any(t == table for t in self.get_table_names(conn, schema=schema))
File "/home/gord/git/sqlalchemy-cockroachdb/sqlalchemy_cockroachdb/base.py", line 181, in get_table_names
for row in conn.execute(
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/base.py", line 1286, in execute
return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/sql/elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/base.py", line 1478, in _execute_clauseelement
ret = self._execute_context(
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/base.py", line 1842, in _execute_context
self._handle_dbapi_exception(
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/base.py", line 2027, in _handle_dbapi_exception
util.raise_(exc_info[1], with_traceback=exc_info[2])
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/util/compat.py", line 207, in raise_
raise exception
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/base.py", line 1799, in _execute_context
self.dialect.do_execute(
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/engine/default.py", line 717, in do_execute
cursor.execute(statement, parameters)
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/dialects/postgresql/asyncpg.py", line 449, in execute
self._adapt_connection.await_(
File "/home/gord/git/sqla-gerrit/lib/sqlalchemy/util/_concurrency_py3k.py", line 67, in await_only
raise exc.MissingGreenlet(
sqlalchemy.exc.MissingGreenlet: greenlet_spawn has not been called; can't call await_() here. Was IO attempted in an unexpected place? (Background on this error at:
https://sqlalche.me/e/14/xd2s)
================================================================================== 530 deselected, 1 error in 89.10s (0:01:29) ===================================================================================
(venv) gord@gord-HP-studio:~/git/sqlalchemy-cockroachdb$