def __init__(self, commit_veto=None): # Embed repoze.tm.TM for now self.tm = TM(application=None, commit_veto=commit_veto) log.info("Transaction Tool initialized") cherrypy.engine.subscribe('stop', self.end_all) return super(TransactionTool, self).__init__("on_start_resource", self.begin)
def make_wsgi_app(self): app = pylonsapp app = zope.testbrowser.wsgi.AuthorizationMiddleware(app) app = TM(app) zope.testbrowser.wsgi._allowed.add(adhocracy_domain) zope.testbrowser.wsgi._allowed_2nd_level.add(adhocracy_domain) return app
def main(global_config, **settings): """ This function returns a WSGI application. It is usually called by the PasteDeploy framework during ``paster serve``. """ from repoze.bfg.authentication import AuthTktAuthenticationPolicy from checking.authorization import RouteAuthorizationPolicy from checking.authentication import verifyUser if not settings.get("sqlalchemy.url"): raise ValueError( "No 'sqlalchemy.url' value in application configuration.") config = Configurator(settings=settings, authentication_policy=AuthTktAuthenticationPolicy( "secret", callback=verifyUser, timeout=30 * 60, max_age=30 * 60, reissue_time=20 * 60), authorization_policy=RouteAuthorizationPolicy()) config.hook_zca() config.begin() setupSqlalchemy(settings) setupRoutes(config) setupChameleon(config) setupi18n(config) config.end() app = config.make_wsgi_app() app = TM(app) return app
def __init__(self, config, application, **settings): super(RepozeTMMiddleware, self).__init__(config, application, **settings) commit_veto = settings.get('commit_veto') if commit_veto: commit_veto = get_object_on_path(commit_veto) self.repozetm = TM(self.application, commit_veto=commit_veto)
class TransactionTool(cherrypy.Tool): """A TurboGears Transaction tool using repose.tm""" def __init__(self, commit_veto=None): # Embed repoze.tm.TM for now self.tm = TM(application=None, commit_veto=commit_veto) log.info("Transaction Tool initialized") cherrypy.engine.subscribe('stop', self.end_all) return super(TransactionTool, self).__init__("on_start_resource", self.begin) def begin(self): request.in_transaction = True t = transaction.begin() so_dm = so.SODataManager() t.join(so_dm) def end(self): # ZODB 3.8 + has isDoomed if hasattr(transaction, 'isDoomed') and transaction.isDoomed(): self.tm.abort() if self.tm.commit_veto is not None: try: if self.tm.commit_veto(None, cherrypy.response.status, cherrypy.response.headers): log.debug("Commit veto, calling abort!") self.tm.abort() except: self.tm.abort() raise else: self.tm.commit() else: self.tm.commit() request.in_transaction = False end.failsafe = True def end_all(self): so.end_all() request.in_transaction = False end_all.failsafe = True def error(self): self.tm.abort() def _setup(self): conf = self._merged_args() p = conf.pop("priority", None) if p is None: p = getattr(self.callable, "priority", self._priority) request.hooks.attach(self._point, self.callable, priority=p, **conf) request.hooks.attach('before_error_response', self.error) request.hooks.attach('on_end_request', self.end, priority=40) request.hooks.attach('on_end_request', self.end_all, priority=50)
class TransactionTool(cherrypy.Tool): """A TurboGears Transaction tool using repose.tm""" def __init__(self, commit_veto=None): # Embed repoze.tm.TM for now self.tm = TM(application=None, commit_veto=commit_veto) log.info("Transaction Tool initialized") cherrypy.engine.subscribe('stop', self.end_all) return super(TransactionTool, self).__init__("on_start_resource", self.begin) def begin(self): request.in_transaction = True t = transaction.begin() if True: #not database._using_sa: XXXXXXXXXXXXXX so_dm = so.SODataManager() t.join(so_dm) def end(self): # ZODB 3.8 + has isDoomed if hasattr(transaction, 'isDoomed') and transaction.isDoomed(): self.tm.abort() if self.tm.commit_veto is not None: try: if self.tm.commit_veto(None, cherrypy.response.status, cherrypy.response.headers): log.debug("Commit veto, calling abort!") self.tm.abort() except: self.tm.abort() raise else: self.tm.commit() else: self.tm.commit() request.in_transaction = False end.failsafe = True def end_all(self): if False: #database._use_sa(): ########### database.session.clear() so.end_all() request.in_transaction = False end_all.failsafe = True def error(self): self.tm.abort() def _setup(self): conf = self._merged_args() p = conf.pop("priority", None) if p is None: p = getattr(self.callable, "priority", self._priority) request.hooks.attach(self._point, self.callable, priority=p, **conf) request.hooks.attach('before_error_response', self.error) request.hooks.attach('on_end_request', self.end, priority=40) request.hooks.attach('on_end_request', self.end_all, priority=50)
tasks = self.dm.items() tasks.sort() return {'tasks': tasks, 'status': 'Marked tasks as done.'} @view_config(context=Root, request_param='not done', renderer=template) def not_done_view(self): tasks = self.request.params.getall('tasks') for task in tasks: self.dm[task]['task_completed'] = False tasks = self.dm.items() tasks.sort() return {'tasks': tasks, 'status': 'Marked tasks as not done.'} @view_config(context=Root, request_param='delete', renderer=template) def delete_view(self): tasks = self.request.params.getall('tasks') for task in tasks: del (self.dm[task]) tasks = self.dm.items() tasks.sort() return {'tasks': tasks, 'status': 'Deleted tasks.'} if __name__ == '__main__': settings = {} config = Configurator(root_factory=Root, settings=settings) config.scan() app = config.make_wsgi_app() app = TM(app, commit_veto=default_commit_veto) serve(app, host='0.0.0.0')