Add "multi-engine" support for Trainwreck transaction views

This commit is contained in:
Lance Edgar 2019-07-25 15:40:38 -05:00
parent b07365b487
commit e756ae3c8f
4 changed files with 40 additions and 5 deletions

View file

@ -30,6 +30,7 @@ import os
import warnings
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker, scoped_session
from rattail.config import make_config
from rattail.exceptions import ConfigurationError
@ -37,6 +38,7 @@ from rattail.db.types import GPCType
from pyramid.config import Configurator
from pyramid.authentication import SessionAuthenticationPolicy
from zope.sqlalchemy import register
import tailbone.db
from tailbone.auth import TailboneAuthorizationPolicy
@ -69,6 +71,13 @@ def make_rattail_config(settings):
if hasattr(rattail_config, 'tempmon_engine'):
tailbone.db.TempmonSession.configure(bind=rattail_config.tempmon_engine)
# create session wrappers for each "extra" Trainwreck engine
for key, engine in rattail_config.trainwreck_engines.items():
if key != 'default':
Session = scoped_session(sessionmaker(bind=engine))
register(Session)
tailbone.db.ExtraTrainwreckSessions[key] = Session
# Make sure rattail config object uses our scoped session, to avoid
# unnecessary connections (and pooling limits).
rattail_config._session_factory = lambda: (tailbone.db.Session(), False)