Changeset 5074
- Timestamp:
- 08/02/08 13:00:33 (5 months ago)
- Files:
-
- trunk/setup.py (modified) (2 diffs)
- trunk/tg/config.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/setup.py
r4950 r5074 18 18 include_package_data=True, 19 19 zip_safe=False, 20 dependency_links=[ 21 'http://turbogears.org/2.0/downloads/current', 22 ], 20 23 install_requires=[ 21 24 'Babel', … … 23 26 'Pylons>=0.9.7beta3', 24 27 'ToscaWidgets>=0.9', 28 'repoze.tm', 25 29 ], 26 30 extras_require={ trunk/tg/config.py
r5069 r5074 1 1 """Simple AppSetup helper class""" 2 2 import os 3 import logging 3 4 from pylons.i18n import ugettext 4 5 from genshi.filters import Translator … … 19 20 20 21 from tw.api import make_middleware as tw_middleware 22 23 log = logging.getLogger(__name__) 21 24 22 25 class Bunch(dict): … … 242 245 return app 243 246 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 244 271 def setup_tg_wsgi_app(self, load_environment): 245 272 """Create a base TG app, with all the standard middleware … … 282 309 app = self.add_auth_middleware(app) 283 310 311 app = self.add_tm_middleware(app) 312 if self.use_sqlalchemy: 313 app = self.add_dbsession_remover_middleware(app) 314 284 315 if asbool(full_stack): 285 316 # This should nevery be true for internal nested apps