[Checkins] SVN: zope.component/trunk/ Add convenience contextmanager for setting the site
Wolfgang Schnerring
wosc at wosc.de
Wed Nov 16 08:43:32 UTC 2011
Log message for revision 123355:
Add convenience contextmanager for setting the site
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
U zope.component/trunk/src/zope/component/tests.py
-=-
Modified: zope.component/trunk/CHANGES.txt
===================================================================
--- zope.component/trunk/CHANGES.txt 2011-11-16 08:12:53 UTC (rev 123354)
+++ zope.component/trunk/CHANGES.txt 2011-11-16 08:43:31 UTC (rev 123355)
@@ -4,7 +4,8 @@
3.11.1 (unreleased)
===================
-- No changes yet.
+- Add convenience function zope.component.hooks.site (a contextmanager),
+ so one can write ``with site(foo): ...``.
3.11.0 (2011-09-22)
===================
Modified: zope.component/trunk/src/zope/component/hooks.py
===================================================================
--- zope.component/trunk/src/zope/component/hooks.py 2011-11-16 08:12:53 UTC (rev 123354)
+++ zope.component/trunk/src/zope/component/hooks.py 2011-11-16 08:43:31 UTC (rev 123355)
@@ -15,6 +15,7 @@
"""
__docformat__ = 'restructuredtext'
+import contextlib
import threading
import zope.component
@@ -77,6 +78,14 @@
return siteinfo.site
+ at contextlib.contextmanager
+def site(site):
+ old_site = getSite()
+ setSite(site)
+ yield
+ setSite(old_site)
+
+
def getSiteManager(context=None):
"""A special hook for getting the site manager.
Modified: zope.component/trunk/src/zope/component/hooks.txt
===================================================================
--- zope.component/trunk/src/zope/component/hooks.txt 2011-11-16 08:12:53 UTC (rev 123354)
+++ zope.component/trunk/src/zope/component/hooks.txt 2011-11-16 08:43:31 UTC (rev 123355)
@@ -63,3 +63,19 @@
None
>>> getSiteManager()
<BaseGlobalComponents base>
+
+
+Context manager
+===============
+
+There also is a context manager for setting the site, which is especially
+useful when writing tests:
+
+>>> import zope.component.hooks
+>>> print getSite()
+None
+>>> with zope.component.hooks.site(site2):
+... getSite() is site2
+True
+>>> print getSite()
+None
Modified: zope.component/trunk/src/zope/component/tests.py
===================================================================
--- zope.component/trunk/src/zope/component/tests.py 2011-11-16 08:12:53 UTC (rev 123354)
+++ zope.component/trunk/src/zope/component/tests.py 2011-11-16 08:43:31 UTC (rev 123355)
@@ -14,6 +14,8 @@
"""Component Architecture Tests
"""
+import __future__
+
import doctest
import persistent
import re
@@ -1720,8 +1722,10 @@
setUp=setUp, tearDown=tearDown),
doctest.DocFileSuite('factory.txt',
setUp=setUp, tearDown=tearDown),
- doctest.DocFileSuite('hooks.txt',checker=checker,
- setUp=setUp, tearDown=tearDown),
+ doctest.DocFileSuite('hooks.txt', checker=checker,
+ setUp=setUp, tearDown=tearDown,
+ globs=dict(
+ with_statement=__future__.with_statement)),
doctest.DocFileSuite('event.txt',
setUp=setUp, tearDown=tearDown),
doctest.DocTestSuite('zope.component.security'),
More information about the checkins
mailing list