From a2bbc4304dcc090734e04e63f54eea225e0cca61 Mon Sep 17 00:00:00 2001 From: Alessandro Molina Date: Mon, 22 Feb 2016 12:01:39 +0100 Subject: [PATCH] Allow init_model to return the initialized session --- tests/test_configuration.py | 18 +++++++++++++++--- tg/configuration/app_config.py | 12 ++++++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 0450ca96..9b12603f 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -7,6 +7,7 @@ from datetime import datetime from sqlalchemy.orm import scoped_session from sqlalchemy.orm import sessionmaker +from sqlalchemy.engine import Engine from ming import Session from ming.orm import ThreadLocalORMSession from tg.configuration.hooks import _TGGlobalHooksNamespace @@ -40,6 +41,7 @@ def teardown(): milestones._reset_all() teardown_session_dir() + class PackageWithModel: __name__ = 'tests' __file__ = __file__ @@ -53,9 +55,13 @@ class FakeDBSession: def remove(self): self.DBSESSION_REMOVED=True - @classmethod - def init_model(package, engine): - pass + def init_model(self, engine): + if isinstance(engine, Engine): + # SQLA + return self.DBSession + else: + # Ming + return dict(ming=True) class lib: class app_globals: @@ -63,6 +69,7 @@ class Globals: pass PackageWithModel.__name__ = 'tests' + class UncopiableList(list): """ This is to test configuration methods that make a copy @@ -814,9 +821,14 @@ def test_setup_sqla_and_ming_both(self): app = base_config.make_wsgi_app() assert app is not None + assert config['MingSession'], config assert config['tg.app_globals'].ming_datastore, config['tg.app_globals'] + + assert config['SQLASession'], config assert config['tg.app_globals'].sa_engine, config['tg.app_globals'] + assert config['DBSession'] is config['SQLASession'], config + def test_setup_ming_persistance_with_url_and_db(self): package = PackageWithModel() conf = AppConfig(minimal=True, root_controller=None) diff --git a/tg/configuration/app_config.py b/tg/configuration/app_config.py index ff4e7d19..2d5c22db 100644 --- a/tg/configuration/app_config.py +++ b/tg/configuration/app_config.py @@ -750,7 +750,11 @@ def mongo_read_pref(value): if model is None: raise TGConfigError('Ming enabled, but no models provided') - model.init_model(datastore) + ming_session = model.init_model(datastore) + if ming_session is not None: + # If init_model returns a specific session, keep it around + # as the MongoDB Session. + conf['MingSession'] = ming_session if 'DBSession' not in conf: # If the user hasn't specified a default session, assume @@ -826,7 +830,11 @@ def setup_sqlalchemy(self): if model is None: raise TGConfigError('SQLAlchemy enabled, but no models provided') - model.init_model(engine) + sqla_session = model.init_model(engine) + if sqla_session is not None: + # If init_model returns a specific session, keep it around + # as the SQLAlchemy Session. + conf['SQLASession'] = sqla_session if 'DBSession' not in conf: # If the user hasn't specified a default session, assume