Changeset 5074

Show
Ignore:
Timestamp:
08/02/08 13:00:33 (5 months ago)
Author:
alberto
Message:

integrated repoze.tm. warning: breaking changes, read an email I'll post at turobogears-trunk for more details (google repoze.tm if reading this somewhen in the future)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/setup.py

    r4950 r5074  
    1818    include_package_data=True, 
    1919    zip_safe=False, 
     20    dependency_links=[ 
     21        'http://turbogears.org/2.0/downloads/current', 
     22    ], 
    2023    install_requires=[ 
    2124        'Babel', 
     
    2326        'Pylons>=0.9.7beta3', 
    2427        'ToscaWidgets>=0.9',  
     28        'repoze.tm', 
    2529    ], 
    2630    extras_require={ 
  • trunk/tg/config.py

    r5069 r5074  
    11"""Simple AppSetup helper class""" 
    22import os 
     3import logging 
    34from pylons.i18n import ugettext 
    45from genshi.filters import Translator 
     
    1920 
    2021from tw.api import make_middleware as tw_middleware 
     22 
     23log = logging.getLogger(__name__) 
    2124 
    2225class Bunch(dict): 
     
    242245        return app 
    243246 
     247    def commit_veto(self, environ, status, headers): 
     248        """ 
     249        This hook is called by repoze.tm in case we want to veto a commit 
     250        for some reason. Return True to force a rollback. 
     251 
     252        By default we veto if the response's status code is an error code. 
     253        Override this method, or monkey patch the instancemethod, to fine 
     254        tune this behaviour. 
     255        """ 
     256        return not (200 <= int(status.split()[0]) < 400) 
     257 
     258    def add_tm_middleware(self, app): 
     259        from repoze.tm import make_tm 
     260        return make_tm(app, self.commit_veto) 
     261 
     262    def add_dbsession_remover_middleware(self, app): 
     263        def remover(environ, start_response): 
     264            try: 
     265                return app(environ, start_response) 
     266            finally: 
     267                log.debug("Removing DBSession from current thread") 
     268                self.DBSession.remove() 
     269        return remover 
     270 
    244271    def setup_tg_wsgi_app(self, load_environment): 
    245272        """Create a base TG app, with all the standard middleware 
     
    282309                app = self.add_auth_middleware(app) 
    283310 
     311            app = self.add_tm_middleware(app) 
     312            if self.use_sqlalchemy: 
     313                app = self.add_dbsession_remover_middleware(app) 
     314 
    284315            if asbool(full_stack): 
    285316                # This should nevery be true for internal nested apps