From 788748e2afedb3d1e180a3033e20ed2d995056a3 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 13 Jan 2010 15:14:03 +0000 Subject: - In ``bfg_routesalchemy``, ``bfg_alchemy`` and ``bfgwiki2`` tutorial, clean up the SQLAlchemy connection by registering a ``repoze.tm.after_end`` callback instead of relying on a ``__del__`` method of a ``Cleanup`` class added to the WSFI environment. The ``__del__`` strategy was fragile and caused problems in the wild. Thanks to Daniel Holth for testing. --- repoze/bfg/paster_templates/alchemy/+package+/run.py_tmpl | 14 +++++++------- .../paster_templates/routesalchemy/+package+/run.py_tmpl | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) (limited to 'repoze') diff --git a/repoze/bfg/paster_templates/alchemy/+package+/run.py_tmpl b/repoze/bfg/paster_templates/alchemy/+package+/run.py_tmpl index c290431c0..6ce86371b 100644 --- a/repoze/bfg/paster_templates/alchemy/+package+/run.py_tmpl +++ b/repoze/bfg/paster_templates/alchemy/+package+/run.py_tmpl @@ -1,17 +1,17 @@ +import transaction + from repoze.bfg.configuration import Configurator +from repoze.tm import after_end +from repoze.tm import isActive from {{package}}.models import appmaker from {{package}}.models import DBSession -class Cleanup: - def __init__(self, cleaner): - self.cleaner = cleaner - def __del__(self): - self.cleaner() - def handle_teardown(event): environ = event.request.environ - environ['usermanager.sasession'] = Cleanup(DBSession.remove) + if isActive(environ): + t = transaction.get() + after_end.register(DBSession.remove, t) def app(global_config, **settings): """ This function returns a WSGI application. diff --git a/repoze/bfg/paster_templates/routesalchemy/+package+/run.py_tmpl b/repoze/bfg/paster_templates/routesalchemy/+package+/run.py_tmpl index 810040297..c4d37238a 100644 --- a/repoze/bfg/paster_templates/routesalchemy/+package+/run.py_tmpl +++ b/repoze/bfg/paster_templates/routesalchemy/+package+/run.py_tmpl @@ -1,17 +1,17 @@ +import transaction + from repoze.bfg.configuration import Configurator +from repoze.tm import after_end +from repoze.tm import isActive from {{package}}.models import DBSession from {{package}}.models import initialize_sql -class Cleanup: - def __init__(self, cleaner): - self.cleaner = cleaner - def __del__(self): - self.cleaner() - def handle_teardown(event): environ = event.request.environ - environ['{{package}}.sasession'] = Cleanup(DBSession.remove) + if isActive(environ): + t = transaction.get() + after_end.register(DBSession.remove, t) def app(global_config, **settings): """ This function returns a WSGI application. -- cgit v1.2.3