]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
Implement rudimentary asyncio support w/ asyncpg
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 4 Jul 2020 16:21:36 +0000 (12:21 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 13 Aug 2020 22:41:53 +0000 (18:41 -0400)
commit5fb0138a3220161703e6ab1087319a669d14e7f4
tree25d006b30830ce6bc71f7a69bed9b570e1ae9654
parentcd03b8f0cecbf72ecd6c99c4d3a6338c8278b40d
Implement rudimentary asyncio support w/ asyncpg

Using the approach introduced at
https://gist.github.com/zzzeek/6287e28054d3baddc07fa21a7227904e

We can now create asyncio endpoints that are then handled
in "implicit IO" form within the majority of the Core internals.
Then coroutines are re-exposed at the point at which we call
into asyncpg methods.

Patch includes:

* asyncpg dialect

* asyncio package

* engine, result, ORM session classes

* new test fixtures, tests

* some work with pep-484 and a short plugin for the
  pyannotate package, which seems to have so-so results

Change-Id: Idbcc0eff72c4cad572914acdd6f40ddb1aef1a7d
Fixes: #3414
67 files changed:
.gitignore
doc/build/changelog/migration_14.rst
doc/build/changelog/migration_20.rst
doc/build/changelog/unreleased_14/3414.rst [new file with mode: 0644]
doc/build/conf.py
doc/build/core/connections.rst
doc/build/dialects/postgresql.rst
doc/build/index.rst
doc/build/intro.rst
doc/build/orm/examples.rst
doc/build/orm/extensions/asyncio.rst [new file with mode: 0644]
doc/build/orm/extensions/index.rst
examples/asyncio/__init__.py [new file with mode: 0644]
examples/asyncio/async_orm.py [new file with mode: 0644]
examples/asyncio/basic.py [new file with mode: 0644]
examples/asyncio/greenlet_orm.py [new file with mode: 0644]
lib/sqlalchemy/dialects/postgresql/__init__.py
lib/sqlalchemy/dialects/postgresql/asyncpg.py [new file with mode: 0644]
lib/sqlalchemy/dialects/postgresql/base.py
lib/sqlalchemy/engine/base.py
lib/sqlalchemy/engine/create.py
lib/sqlalchemy/engine/default.py
lib/sqlalchemy/engine/result.py
lib/sqlalchemy/ext/asyncio/__init__.py [new file with mode: 0644]
lib/sqlalchemy/ext/asyncio/base.py [new file with mode: 0644]
lib/sqlalchemy/ext/asyncio/engine.py [new file with mode: 0644]
lib/sqlalchemy/ext/asyncio/exc.py [new file with mode: 0644]
lib/sqlalchemy/ext/asyncio/result.py [new file with mode: 0644]
lib/sqlalchemy/ext/asyncio/session.py [new file with mode: 0644]
lib/sqlalchemy/future/__init__.py
lib/sqlalchemy/future/engine.py
lib/sqlalchemy/orm/loading.py
lib/sqlalchemy/orm/persistence.py
lib/sqlalchemy/pool/__init__.py
lib/sqlalchemy/pool/impl.py
lib/sqlalchemy/sql/__init__.py
lib/sqlalchemy/sql/sqltypes.py
lib/sqlalchemy/testing/__init__.py
lib/sqlalchemy/testing/assertions.py
lib/sqlalchemy/testing/asyncio.py [new file with mode: 0644]
lib/sqlalchemy/testing/config.py
lib/sqlalchemy/testing/fixtures.py
lib/sqlalchemy/testing/plugin/plugin_base.py
lib/sqlalchemy/testing/plugin/pytestplugin.py
lib/sqlalchemy/testing/requirements.py
lib/sqlalchemy/testing/suite/test_results.py
lib/sqlalchemy/testing/suite/test_types.py
lib/sqlalchemy/util/__init__.py
lib/sqlalchemy/util/_concurrency_py3k.py [new file with mode: 0644]
lib/sqlalchemy/util/concurrency.py [new file with mode: 0644]
lib/sqlalchemy/util/queue.py
setup.cfg
test/base/test_concurrency_py3k.py [new file with mode: 0644]
test/conftest.py
test/dialect/postgresql/test_dialect.py
test/dialect/postgresql/test_query.py
test/dialect/postgresql/test_types.py
test/engine/test_logging.py
test/engine/test_reconnect.py
test/engine/test_transaction.py
test/ext/asyncio/__init__.py [new file with mode: 0644]
test/ext/asyncio/test_engine_py3k.py [new file with mode: 0644]
test/ext/asyncio/test_session_py3k.py [new file with mode: 0644]
test/orm/test_update_delete.py
test/requirements.py
test/sql/test_defaults.py
tox.ini