diff options
| author | Wolfgang Schnerring <wosc@wosc.de> | 2012-04-02 06:06:05 +0000 |
|---|---|---|
| committer | Wolfgang Schnerring <wosc@wosc.de> | 2012-04-02 06:06:05 +0000 |
| commit | 0429a1b398c9707f6ff84e84dc78234e6b7adc84 (patch) | |
| tree | aa869ce45ab9426827f80e7eea950b9308812a1e /src/zope | |
| parent | e697304c5a175f68c112484e2abd71d0c1eb1479 (diff) | |
| download | zope-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.py | 6 | ||||
| -rw-r--r-- | src/zope/component/hooks.txt | 15 |
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 + |
