summaryrefslogtreecommitdiff
path: root/src/zope
diff options
context:
space:
mode:
authorWolfgang Schnerring <wosc@wosc.de>2012-04-02 06:06:05 +0000
committerWolfgang Schnerring <wosc@wosc.de>2012-04-02 06:06:05 +0000
commit0429a1b398c9707f6ff84e84dc78234e6b7adc84 (patch)
treeaa869ce45ab9426827f80e7eea950b9308812a1e /src/zope
parente697304c5a175f68c112484e2abd71d0c1eb1479 (diff)
downloadzope-component-0429a1b398c9707f6ff84e84dc78234e6b7adc84.tar.gz
Fixes LP768151: Wrap ``site`` context manager in try/finally (patch by Jason Madden <jamadden@gmail.com>)
Diffstat (limited to 'src/zope')
-rw-r--r--src/zope/component/hooks.py6
-rw-r--r--src/zope/component/hooks.txt15
2 files changed, 19 insertions, 2 deletions
diff --git a/src/zope/component/hooks.py b/src/zope/component/hooks.py
index b5662c6..39dbb2c 100644
--- a/src/zope/component/hooks.py
+++ b/src/zope/component/hooks.py
@@ -82,8 +82,10 @@ def getSite():
def site(site):
old_site = getSite()
setSite(site)
- yield
- setSite(old_site)
+ try:
+ yield
+ finally:
+ setSite(old_site)
def getSiteManager(context=None):
diff --git a/src/zope/component/hooks.txt b/src/zope/component/hooks.txt
index 588c1a5..10a8bff 100644
--- a/src/zope/component/hooks.txt
+++ b/src/zope/component/hooks.txt
@@ -80,3 +80,18 @@ None
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
+