def add_tm_middleware(self, app): """Set up the transaction managment middleware. To abort a transaction inside a TG2 app:: import transaction transaction.doom() By default http error responses also roll back transactions, but this behavior can be overridden by overriding base_config.commit_veto. """ from repoze.tm import make_tm return make_tm(app, self.commit_veto)
def make_karl_pipeline(app): config = app.config uri = app.uri pipeline = app urchin_account = config.get('urchin.account') if urchin_account: pipeline = UrchinMiddleware(pipeline, urchin_account) pipeline = make_who_middleware(pipeline, config) pipeline = make_tm(pipeline) pipeline = zodb_connector(pipeline, config, zodb_uri=uri) pipeline = Retry(pipeline, 3, retryable) pipeline = error_log_middleware(pipeline) if not asbool(config.get('debug', 'False')): pipeline = ErrorPageFilter(pipeline, None, 'static', '') return pipeline
def make_app(global_conf, full_stack=True, static_files=True, **app_conf): """Create a Pylons WSGI application and return it ``global_conf`` The inherited configuration for this application. Normally from the [DEFAULT] section of the Paste ini file. ``full_stack`` Whether this application provides a full WSGI stack (by default, meaning it handles its own exceptions and errors). Disable full_stack when this application is "managed" by another WSGI middleware. ``static_files`` Whether this application serves its own static files; disable when another web server is responsible for serving them. ``app_conf`` The application's local configuration. Normally specified in the [app:<name>] section of the Paste ini file (where <name> defaults to main). """ # Configure the Pylons environment config = load_environment(global_conf, app_conf) # The Pylons WSGI app app = PylonsApp(config=config) # Routing/Session/Cache Middleware app = RoutesMiddleware(app, config['routes.map'], singleton=False) app = SessionMiddleware(app, config) # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) # Set up repoze.what-quickstart authentication: # http://wiki.pylonshq.com/display/pylonscookbook/Authorization+with+repoze.what app = add_auth(app, config) # Set up the TW middleware, as per errors and instructions at: # http://groups.google.com/group/toscawidgets-discuss/browse_thread/thread/c06950b8d1f62db9 # http://toscawidgets.org/documentation/ToscaWidgets/install/pylons_app.html app = tw.api.make_middleware(app, { 'toscawidgets.framework': 'pylons', 'toscawidgets.framework.default_view': 'genshi', }) # Add transaction management app = make_tm(app, transaction_commit_veto) app = DBSessionRemoverMiddleware(app, DBSession) # If enabled, set up the proxy prefix for routing behind # fastcgi and mod_proxy based deployments. if (config.get('proxy_prefix', None)): app = setup_prefix_middleware(app, global_conf, config['proxy_prefix']) # END CUSTOM MIDDLEWARE if asbool(full_stack): # Handle Python exceptions app = ErrorHandler(app, global_conf, **config['pylons.errorware']) # Display error documents for 401, 403, 404 status codes (and # 500 when debug is disabled) if asbool(config['debug']): app = StatusCodeRedirect(app) else: app = StatusCodeRedirect(app, [400, 401, 403, 404, 500]) # Establish the Registry for this application app = RegistryManager(app) if asbool(static_files): # Serve static files static_app = StaticURLParser(config['pylons.paths']['static_files']) app = Cascade([static_app, app]) app.config = config return app
def test_make_tm_noveto(self): from repoze.tm import make_tm tm = make_tm(DummyApplication(), {}, None) self.assertEqual(tm.commit_veto, None)
def test_make_tm_withveto(self): from repoze.tm import make_tm tm = make_tm(DummyApplication(), {}, 'repoze.tm.tests:fakeveto') self.assertEqual(tm.commit_veto, fakeveto)