diff options
| author | Chris McDonough <chrism@agendaless.com> | 2010-01-13 15:14:03 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2010-01-13 15:14:03 +0000 |
| commit | 788748e2afedb3d1e180a3033e20ed2d995056a3 (patch) | |
| tree | 2deb7a16b37ce47341649ad82bdf136a37e751f2 /docs/tutorials/bfgwiki2/src | |
| parent | de449d91fafc0fd4bec6d552dab44845b0948784 (diff) | |
| download | pyramid-788748e2afedb3d1e180a3033e20ed2d995056a3.tar.gz pyramid-788748e2afedb3d1e180a3033e20ed2d995056a3.tar.bz2 pyramid-788748e2afedb3d1e180a3033e20ed2d995056a3.zip | |
- 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.
Diffstat (limited to 'docs/tutorials/bfgwiki2/src')
4 files changed, 34 insertions, 32 deletions
diff --git a/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py b/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py index 2506ca939..2e38bd29b 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py @@ -1,18 +1,18 @@ +import transaction + from repoze.bfg.configuration import Configurator +from repoze.tm import after_end +from repoze.tm import isActive from tutorial.models import DBSession from tutorial.models import initialize_sql from tutorial.models import RootFactory -class Cleanup: - def __init__(self, cleaner): - self.cleaner = cleaner - def __del__(self): - self.cleaner() - def handle_teardown(event): environ = event.request.environ - environ['tutorial.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. @@ -22,8 +22,8 @@ def app(global_config, **settings): """ db_string = settings.get('db_string') if db_string is None: - raise ValueError( - "No 'db_string' value in application configuration.") + raise ValueError("No 'db_string' value in application " + "configuration.") initialize_sql(db_string) config = Configurator(settings=settings, root_factory=RootFactory) config.begin() diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py index bc1197115..6105d3eea 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py @@ -1,17 +1,17 @@ +import transaction + from repoze.bfg.configuration import Configurator +from repoze.tm import after_end +from repoze.tm import isActive from tutorial.models import DBSession from tutorial.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['tutorial.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/docs/tutorials/bfgwiki2/src/models/tutorial/run.py b/docs/tutorials/bfgwiki2/src/models/tutorial/run.py index d00d32265..6105d3eea 100644 --- a/docs/tutorials/bfgwiki2/src/models/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/models/tutorial/run.py @@ -1,17 +1,17 @@ +import transaction + from repoze.bfg.configuration import Configurator +from repoze.tm import after_end +from repoze.tm import isActive from tutorial.models import DBSession from tutorial.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['tutorial.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. @@ -21,7 +21,8 @@ def app(global_config, **settings): """ db_string = settings.get('db_string') if db_string is None: - raise ValueError("No 'db_string' value in application configuration.") + raise ValueError("No 'db_string' value in application " + "configuration.") initialize_sql(db_string) config = Configurator(settings=settings) config.begin() diff --git a/docs/tutorials/bfgwiki2/src/views/tutorial/run.py b/docs/tutorials/bfgwiki2/src/views/tutorial/run.py index d00d32265..6105d3eea 100644 --- a/docs/tutorials/bfgwiki2/src/views/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/views/tutorial/run.py @@ -1,17 +1,17 @@ +import transaction + from repoze.bfg.configuration import Configurator +from repoze.tm import after_end +from repoze.tm import isActive from tutorial.models import DBSession from tutorial.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['tutorial.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. @@ -21,7 +21,8 @@ def app(global_config, **settings): """ db_string = settings.get('db_string') if db_string is None: - raise ValueError("No 'db_string' value in application configuration.") + raise ValueError("No 'db_string' value in application " + "configuration.") initialize_sql(db_string) config = Configurator(settings=settings) config.begin() |
