diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-06-12 13:26:39 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2018-07-02 18:02:24 -0400 |
commit | df6bf3401266f42271627c1e408f87c71a06cef7 (patch) | |
tree | fd0fb9c69dee834125ba98ebf21831c84bf25bc8 | |
parent | 4c70002578d8ea109a7d0889ab53b9c20bae6ed4 (diff) | |
download | oslo-db-df6bf3401266f42271627c1e408f87c71a06cef7.tar.gz |
Rename enginefacade.async to enginefacade.async_
Python 3.7 now makes "async" a keyword, so deprecate the
"async" name and replace with "async_". Additionally,
use attribute name access only in order to implement and
test "async" as it won't work under Python 3.7.
Closes-Bug: #1775866
Change-Id: Ifb2c59c2cfbd615b04570b31fcfe868f4ffea3c6
-rw-r--r-- | oslo_db/sqlalchemy/enginefacade.py | 14 | ||||
-rw-r--r-- | oslo_db/tests/sqlalchemy/test_enginefacade.py | 31 |
2 files changed, 39 insertions, 6 deletions
diff --git a/oslo_db/sqlalchemy/enginefacade.py b/oslo_db/sqlalchemy/enginefacade.py index 2b9f81e..481e166 100644 --- a/oslo_db/sqlalchemy/enginefacade.py +++ b/oslo_db/sqlalchemy/enginefacade.py @@ -17,6 +17,7 @@ import operator import threading import warnings +import debtcollector.moves import debtcollector.removals import debtcollector.renames from oslo_config import cfg @@ -965,7 +966,7 @@ class _TransactionContextManager(object): return self._clone(connection=True) @property - def async(self): + def async_(self): """Modifier to set a READER operation to ASYNC_READER.""" if self._mode is _WRITER: @@ -1049,6 +1050,17 @@ class _TransactionContextManager(object): transaction_contexts_by_thread.current = restore +@property +@debtcollector.moves.moved_property("async_") +def async_compat(self): + return self.async_ + +setattr( + _TransactionContextManager, + "async", async_compat +) + + def _context_descriptor(attr=None): getter = operator.attrgetter(attr) diff --git a/oslo_db/tests/sqlalchemy/test_enginefacade.py b/oslo_db/tests/sqlalchemy/test_enginefacade.py index ced9483..cab7547 100644 --- a/oslo_db/tests/sqlalchemy/test_enginefacade.py +++ b/oslo_db/tests/sqlalchemy/test_enginefacade.py @@ -15,6 +15,7 @@ import contextlib import copy import fixtures import pickle +import sys import warnings import mock @@ -607,7 +608,7 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): def test_async_on_writer_raises(self): exc = self.assertRaises( - TypeError, getattr, enginefacade.writer, "async" + TypeError, getattr, enginefacade.writer, "async_" ) self.assertEqual( "Setting async on a WRITER makes no sense", @@ -626,7 +627,7 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): def test_reader_nested_in_async_reader_raises(self): context = oslo_context.RequestContext() - @enginefacade.reader.async + @enginefacade.reader.async_ def go1(context): context.session.execute("test1") go2(context) @@ -647,7 +648,7 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): def test_reader_allow_async_nested_in_async_reader(self): context = oslo_context.RequestContext() - @enginefacade.reader.async + @enginefacade.reader.async_ def go1(context): context.session.execute("test1") go2(context) @@ -701,7 +702,7 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): def test_writer_nested_in_async_reader_raises(self): context = oslo_context.RequestContext() - @enginefacade.reader.async + @enginefacade.reader.async_ def go1(context): context.session.execute("test1") go2(context) @@ -741,10 +742,30 @@ class MockFacadeTest(oslo_test_base.BaseTestCase): with self._assert_writer_session(makers) as session: session.execute("test2") + def test_deprecated_async_reader_name(self): + if sys.version_info >= (3, 7): + self.skipTest("Test only runs on Python < 3.7") + + context = oslo_context.RequestContext() + + old = getattr(enginefacade.reader, "async") + + @old + def go1(context): + context.session.execute("test1") + + go1(context) + + with self._assert_engines() as engines: + with self._assert_makers(engines) as makers: + with self._assert_async_reader_session( + makers, assert_calls=False) as session: + session.execute("test1") + def test_async_reader_then_reader_ok(self): context = oslo_context.RequestContext() - @enginefacade.reader.async + @enginefacade.reader.async_ def go1(context): context.session.execute("test1") |