[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