[Checkins] SVN: zope.component/trunk/ Fixes LP768151: Wrap ``site`` context manager in try/finally (patch by Jason Madden <jamadden at gmail.com>)
Wolfgang Schnerring
cvs-admin at zope.org
Mon Apr 2 06:06:08 UTC 2012
Log message for revision 124865:
Fixes LP768151: Wrap ``site`` context manager in try/finally (patch by Jason Madden <jamadden at gmail.com>)
Changed:
U zope.component/trunk/CHANGES.txt
U zope.component/trunk/src/zope/component/hooks.py
U zope.component/trunk/src/zope/component/hooks.txt
-=-
Modified: zope.component/trunk/CHANGES.txt
===================================================================
--- zope.component/trunk/CHANGES.txt 2012-04-02 05:44:09 UTC (rev 124864)
+++ zope.component/trunk/CHANGES.txt 2012-04-02 06:06:05 UTC (rev 124865)
@@ -4,7 +4,7 @@
3.12.1 (unreleased)
===================
-- Nothing changed yet.
+- Wrap ``with site(foo)`` in try/finally (LP768151).
3.12.0 (2011-11-16)
Modified: zope.component/trunk/src/zope/component/hooks.py
===================================================================
--- zope.component/trunk/src/zope/component/hooks.py 2012-04-02 05:44:09 UTC (rev 124864)
+++ zope.component/trunk/src/zope/component/hooks.py 2012-04-02 06:06:05 UTC (rev 124865)
@@ -82,8 +82,10 @@
def site(site):
old_site = getSite()
setSite(site)
- yield
- setSite(old_site)
+ try:
+ yield
+ finally:
+ setSite(old_site)
def getSiteManager(context=None):
Modified: zope.component/trunk/src/zope/component/hooks.txt
===================================================================
--- zope.component/trunk/src/zope/component/hooks.txt 2012-04-02 05:44:09 UTC (rev 124864)
+++ zope.component/trunk/src/zope/component/hooks.txt 2012-04-02 06:06:05 UTC (rev 124865)
@@ -80,3 +80,18 @@
True
>>> print getSite()
None
+
+The site is properly restored even if the body of the with statement
+raises an exception:
+
+>>> print getSite()
+None
+>>> with zope.component.hooks.site(site2):
+... getSite() is site2
+... raise ValueError('An error in the body')
+Traceback (most recent call last):
+ ...
+ValueError: An error in the body
+>>> print getSite()
+None
+
More information about the checkins
mailing list