diff options
author | zhulongcheng <zhulongcheng.me@gmail.com> | 2016-09-14 21:16:26 +0800 |
---|---|---|
committer | zhulongcheng <zhulongcheng.me@gmail.com> | 2016-09-14 21:16:26 +0800 |
commit | 535a1cfecdea91c63a3a1ebc43c16b37bfcca8f9 (patch) | |
tree | 4dcf2e800c98ec9849fd73890fd06ce52c4fa5c8 | |
parent | c3d582d87b5bd404d380c5707f35b7a20c9828fc (diff) | |
download | sqlalchemy-pr/307.tar.gz |
fix scope_session.__call__pr/307
-rw-r--r-- | lib/sqlalchemy/orm/scoping.py | 18 | ||||
-rw-r--r-- | test/orm/test_scoping.py | 21 |
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 |