Skip to content

Commit

Permalink
Merge pull request #203 from Ouranosinc/fix-scoped-sessions
Browse files Browse the repository at this point in the history
set `use_tweens` to True when using the `invoke_subrequest` pyramid method
  • Loading branch information
fmigneault authored Jul 9, 2019
2 parents 91c43d3 + 7111424 commit 86be087
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 8 deletions.
6 changes: 6 additions & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ History
Unreleased
---------------------

Features / Changes
~~~~~~~~~~~~~~~~~~~~~
* add ``use_tweens=True`` to ``request.invoke_subrequest`` calls in order to properly handle the nested database
transaction states with the manager (#203). Automatically provides ``pool_threadlocal`` functionality added in
``1.3.1`` as per implementation of ``pyramid_tm`` (#201).

1.3.1 (2019-07-05)
---------------------

Expand Down
2 changes: 1 addition & 1 deletion magpie/api/login/login.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def sign_in(request):
signin_internal_data = {u"user_name": user_name, u"password": password, u"provider_name": provider_name}
signin_sub_request = Request.blank(signin_internal_path, base_url=request.application_url,
headers={"Accept": CONTENT_TYPE_JSON}, POST=signin_internal_data)
signin_response = request.invoke_subrequest(signin_sub_request)
signin_response = request.invoke_subrequest(signin_sub_request, use_tweens=True)
if signin_response.status_code == HTTPOk.code:
return convert_response(signin_response)
login_failure(request, s.Signin_POST_UnauthorizedResponseSchema.description)
Expand Down
11 changes: 5 additions & 6 deletions magpie/db.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sqlalchemy.orm import scoped_session

from magpie.constants import get_constant
from magpie.definitions.alembic_definitions import alembic
from magpie.definitions.sqlalchemy_definitions import (
Expand Down Expand Up @@ -45,17 +47,14 @@ def get_engine(container=None, prefix="sqlalchemy.", **kwargs):
# type: (Optional[AnySettingsContainer], Str, Any) -> Engine
settings = get_settings(container or {})
settings[prefix + "url"] = get_db_url()
settings[prefix + "pool_pre_ping"] = settings.get(prefix + "pool_pre_ping", True)
settings[prefix + "pool_threadlocal"] = True
settings.setdefault(prefix + "pool_pre_ping", True)
kwargs = kwargs or {}
kwargs["convert_unicode"] = True
return engine_from_config(settings, prefix, **kwargs)


def get_session_factory(engine):
factory = sessionmaker()
factory.configure(bind=engine)
return factory
return sessionmaker(bind=engine)


def get_tm_session(session_factory, transaction_manager):
Expand Down Expand Up @@ -87,7 +86,7 @@ def get_tm_session(session_factory, transaction_manager):
def get_db_session_from_settings(settings=None, **kwargs):
# type: (Optional[AnySettingsContainer], Any) -> Session
session_factory = get_session_factory(get_engine(settings, **kwargs))
db_session = get_tm_session(session_factory, transaction)
db_session = get_tm_session(session_factory, transaction.manager)
return db_session


Expand Down
2 changes: 1 addition & 1 deletion magpie/ui/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def request_api(request, # type: Request
extra_kwargs["cookies"] = cookies

subreq = Request.blank(path, base_url=request.application_url, headers=headers, POST=data, **extra_kwargs)
return request.invoke_subrequest(subreq)
return request.invoke_subrequest(subreq, use_tweens=True)


def error_badrequest(func):
Expand Down

0 comments on commit 86be087

Please sign in to comment.