summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhulongcheng <zhulongcheng.me@gmail.com>2016-09-14 21:16:26 +0800
committerzhulongcheng <zhulongcheng.me@gmail.com>2016-09-14 21:16:26 +0800
commit535a1cfecdea91c63a3a1ebc43c16b37bfcca8f9 (patch)
tree4dcf2e800c98ec9849fd73890fd06ce52c4fa5c8
parentc3d582d87b5bd404d380c5707f35b7a20c9828fc (diff)
downloadsqlalchemy-pr/307.tar.gz
fix scope_session.__call__pr/307
-rw-r--r--lib/sqlalchemy/orm/scoping.py18
-rw-r--r--test/orm/test_scoping.py21
2 files changed, 27 insertions, 12 deletions
diff --git a/lib/sqlalchemy/orm/scoping.py b/lib/sqlalchemy/orm/scoping.py
index 6306514cb..e3472e940 100644
--- a/lib/sqlalchemy/orm/scoping.py
+++ b/lib/sqlalchemy/orm/scoping.py
@@ -62,18 +62,14 @@ class scoped_session(object):
"""
if kw:
- scope = kw.pop('scope', False)
- if scope is not None:
- if self.registry.has():
- raise sa_exc.InvalidRequestError(
- "Scoped session is already present; "
- "no new arguments may be specified.")
- else:
- sess = self.session_factory(**kw)
- self.registry.set(sess)
- return sess
+ if self.registry.has():
+ raise sa_exc.InvalidRequestError(
+ "Scoped session is already present; "
+ "no new arguments may be specified.")
else:
- return self.session_factory(**kw)
+ sess = self.session_factory(**kw)
+ self.registry.set(sess)
+ return sess
else:
return self.registry()
diff --git a/test/orm/test_scoping.py b/test/orm/test_scoping.py
index 87557a162..33ba704cc 100644
--- a/test/orm/test_scoping.py
+++ b/test/orm/test_scoping.py
@@ -7,7 +7,7 @@ from sqlalchemy.testing.schema import Table, Column
from sqlalchemy.orm import mapper, relationship, query
from sqlalchemy.testing import eq_
from sqlalchemy.testing import fixtures
-
+from sqlalchemy.testing.mock import Mock
class _ScopedTest(fixtures.MappedTest):
@@ -90,5 +90,24 @@ class ScopedSessionTest(fixtures.MappedTest):
Session.configure, bind=testing.db
)
+ def test_call_with_kwargs(self):
+ mock_scope_func = Mock()
+ SessionMaker = sa.orm.sessionmaker()
+ Session = scoped_session(sa.orm.sessionmaker(), mock_scope_func)
+
+ s0 = SessionMaker()
+ assert s0.autocommit == False
+ mock_scope_func.return_value = 0
+ s1 = Session()
+ assert s1.autocommit == False
+
+ assert_raises_message(
+ sa.exc.InvalidRequestError,
+ "Scoped session is already present",
+ Session, autocommit=True
+ )
+ mock_scope_func.return_value = 1
+ s2 = Session(autocommit=True)
+ assert s2.autocommit == True