[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