diff --git a/flaskext/sqlalchemy.py b/flaskext/sqlalchemy.py index adbecf35..8ee21f6b 100644 --- a/flaskext/sqlalchemy.py +++ b/flaskext/sqlalchemy.py @@ -586,6 +586,10 @@ class User(db.Model): .. versionadded:: 0.10 The `session_options` parameter was added. + + .. versionadded:: 0.16 + `scopefunc` is now accepted on `session_options`. It allows specifying + a custom function which will define the SQLAlchemy session's scoping. """ def __init__(self, app=None, use_native_unicode=True, @@ -593,6 +597,11 @@ def __init__(self, app=None, use_native_unicode=True, self.use_native_unicode = use_native_unicode self.session_extensions = to_list(session_extensions, []) + \ [_SignallingSessionExtension()] + + session_options.set_default( + 'scopefunc', _request_ctx_stack.__ident_func__ + ) + self.session = self.create_scoped_session(session_options) self.Model = self.make_declarative_base() self._engine_lock = Lock() @@ -611,17 +620,11 @@ def metadata(self): """Returns the metadata""" return self.Model.metadata - def create_scoped_session(self, options=None, scopefunc=None): - """Helper factory method that creates a scoped session. - - .. versionadded:: 0.16 - The `scopefunc` parameter was added. - - """ + def create_scoped_session(self, options=None): + """Helper factory method that creates a scoped session.""" if options is None: options = {} - if scopefunc is None: - scopefunc = _request_ctx_stack.__ident_func__ + scopefunc=options.pop('scopefunc', None) return orm.scoped_session( partial(_SignallingSession, self, **options), scopefunc=scopefunc )