summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2019-05-15 19:49:20 +0000
committerGerrit Code Review <review@openstack.org>2019-05-15 19:49:20 +0000
commitb9c51e295b81cedbc747e662628bc69d1f60e6db (patch)
treebebd87143da6a09b3243b057b630cdb991de8bf7
parent925bb81c7f79f71050461e06b8cd3d9f0eb47042 (diff)
parent7c164cf9388340735c8615bd85412e4b3efd7334 (diff)
downloadoslo-db-b9c51e295b81cedbc747e662628bc69d1f60e6db.tar.gz
Merge "Support context function argument as keyword"
-rw-r--r--oslo_db/sqlalchemy/enginefacade.py5
-rw-r--r--oslo_db/tests/sqlalchemy/test_enginefacade.py13
2 files changed, 17 insertions, 1 deletions
diff --git a/oslo_db/sqlalchemy/enginefacade.py b/oslo_db/sqlalchemy/enginefacade.py
index 39fd25d..efe947e 100644
--- a/oslo_db/sqlalchemy/enginefacade.py
+++ b/oslo_db/sqlalchemy/enginefacade.py
@@ -1003,10 +1003,13 @@ class _TransactionContextManager(object):
context_index = 1
else:
context_index = 0
+ context_kw = argspec.args[context_index]
@functools.wraps(fn)
def wrapper(*args, **kwargs):
- context = args[context_index]
+ context = kwargs.get(context_kw, None)
+ if not context:
+ context = args[context_index]
with self._transaction_scope(context):
return fn(*args, **kwargs)
diff --git a/oslo_db/tests/sqlalchemy/test_enginefacade.py b/oslo_db/tests/sqlalchemy/test_enginefacade.py
index 12ccba6..5788fb3 100644
--- a/oslo_db/tests/sqlalchemy/test_enginefacade.py
+++ b/oslo_db/tests/sqlalchemy/test_enginefacade.py
@@ -519,6 +519,19 @@ class MockFacadeTest(oslo_test_base.BaseTestCase):
with self._assert_reader_session(makers) as session:
session.execute("test")
+ def test_session_reader_decorator_kwarg_call(self):
+ context = oslo_context.RequestContext()
+
+ @enginefacade.reader
+ def go(context):
+ context.session.execute("test")
+ go(context=context)
+
+ with self._assert_engines() as engines:
+ with self._assert_makers(engines) as makers:
+ with self._assert_reader_session(makers) as session:
+ session.execute("test")
+
def test_connection_reader_decorator(self):
context = oslo_context.RequestContext()