[Checkins] SVN: zope.publisher/trunk/ Removed use of 'zope.testing.doctestunit' in favor of stdlib's 'doctest.

Tres Seaver tseaver at palladion.com
Fri Apr 16 15:13:23 EDT 2010


Log message for revision 110994:
  Removed use of 'zope.testing.doctestunit' in favor of stdlib's 'doctest.
  

Changed:
  U   zope.publisher/trunk/CHANGES.txt
  U   zope.publisher/trunk/src/zope/publisher/skinnable.txt
  U   zope.publisher/trunk/src/zope/publisher/tests/test_browser.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_defaultview.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_http.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_paste.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_skinnable.py
  U   zope.publisher/trunk/src/zope/publisher/tests/test_xmlrpc.py

-=-
Modified: zope.publisher/trunk/CHANGES.txt
===================================================================
--- zope.publisher/trunk/CHANGES.txt	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/CHANGES.txt	2010-04-16 19:13:22 UTC (rev 110994)
@@ -4,6 +4,8 @@
 3.12.2 (unreleased)
 -------------------
 
+- Removed use of 'zope.testing.doctestunit' in favor of stdlib's 'doctest.
+
 - Fixed bug where xml-rpc requests would hang when served using
   paster.httpserver.
 

Modified: zope.publisher/trunk/src/zope/publisher/skinnable.txt
===================================================================
--- zope.publisher/trunk/src/zope/publisher/skinnable.txt	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/src/zope/publisher/skinnable.txt	2010-04-16 19:13:22 UTC (rev 110994)
@@ -1,330 +1,330 @@
-=========
-Skinnable
-=========
-
-Requests can provide skins. But what exactly is a skin? At the code
-level, a skin is just an interface which a request provides. Why do we
-need skins? We can use skins for registering different adapters.
-
-That's a little bit much use of the word skin. Let's explain it in more
-detail. A skin is an interface which provides an interface. This
-interface is called ISkinType. The zope.publisher right now provides
-only one specific skin type interface used in the IBrowserRequest
-implementation. This interface is called BrowserSkinType.
-
-Since the zope server provides request factories for building a request,
-each such request type could provide it's own skin type interface. This
-ensures that we can register a skin type for each request.
-
-Now let's look at a higher level. A skin is a concept which we can use
-for providing different kinds of views, templates or other adapters
-adapting a request. These skins are the key component for providing
-different kind of application layers. A skin makes it possible for
-an application to act very differently with each skin. Of course, that's
-only the case at the interaction level where the request is involved.
-But that's the case most of the time since we have a web application
-server.
-
-Another part of the skinnable concept is that an application can define
-zero or more default skins. This is done with the IDefaultSkin
-interface. Default skins can be defined for request interfaces or
-implementations. Such a default skin can get overriden in a custom
-setup. Overriding a skin can be done by using the defaultSkin directive
-offered from zope.app.publication.zcml.
-
-Why does a request need a default skin? If a request needs to provide
-some pluggable concepts that require that a default adapter is
-registered for a request, this adapter could be registered for the
-default skin. If a project likes to use another pattern and needs to
-register another request adapter, the project could register its own
-skin and register the custom adapter for this new project based skin.
-This is very handy and allows developers to skip a complete
-default-skin-based setup for a given request.
-
-In general, this means a request interface and the request class that
-implements the request interface only provides the basic API but no
-adapters if the request needs to delegate things to an adapter. For such
-a request a default skin can get defined. This default skin can provide
-all adapters which the request implementation needs to have. This gives
-us the option to replace the default skin within a custom skin and
-provide custom adapters.
-
-Our exmple will define a full request and all its components from scratch.
-it doesn't depend on IBrowserRequest. We'll use a JSON-RPC as sample like
-the z3c.jsonrpc package provides.
-
-Layers and Skins
-----------------
-
-We also use the term "layer" if we talk about skins. A layer or skin
-layer is an interface registered as a ISkinType without a name. Zope
-provides a traversal pattern which allows traversal to a skin within a
-skin namespace called ``skin``. This allows traversal to a method called
-``applySkin`` which will apply a registered named skin. This means if we
-register an ISkinType with a name argument, we will register a skin. if
-we register a ISkinType without a name just we register a layer. This
-means, layers are not traversable ISkinType interfaces.
-
-Let's start define a request:
-
-  >>> from zope.publisher.interfaces import IRequest
-  >>> class IJSONRequest(IRequest):
-  ...     """JSON request."""
-
-And we define a skin type:
-
-  >>> from zope.publisher.interfaces import ISkinType
-  >>> class IJSONSkinType(ISkinType):
-  ...     """JSON skin type."""
-
-A request would implement the IJSONRequest interface but not the request type
-interface:
-
-  >>> import zope.interface
-  >>> from zope.publisher.base import BaseRequest
-  >>> class JSONRequest(BaseRequest):
-  ...     """JSON request implementation."""
-  ...     zope.interface.implements(IJSONRequest)
-
-Now our request provides IJSONRequest because it implement that interface:
-
-  >>> from StringIO import StringIO
-  >>> request = JSONRequest(StringIO(''), {})
-  >>> IJSONRequest.providedBy(request)
-  True
-
-
-setDefaultSkin
---------------
-
-The default skin is a marker interface that can be registered as an
-adapter that provides IDefaultSkin for the request type. A default skin
-interface like any other skin must also provide ISkinType. This is
-important since applySkin will lookup for skins based on this type.
-
-Note: Any interfaces that are directly provided by the request coming into
-this method are replaced by the applied layer/skin interface. This is very
-important since the retry pattern can use a clean request without any
-directly provided interface after a retry gets started.
-
-If a default skin is not available, the fallback default skin is applied
-if available for the given request type. The default fallback skin is
-implemented as an named adapter factory providing IDefaultSkin and
-using ``default`` as name.
-
-Important to know is that some skin adapters get registered as interfaces
-and the fallback skins as adapters. See the defaultSkin directive in
-zope.app.publication.zcml for more information.  It registers plain
-interfaces as adapters which are not adaptable.  We have special code to
-handle this case, which we will demonstrate below.
-
-Each request can only have one (unnamed) default skin and will fallback to
-the named (default) fallback skin if available.
-
-Only the IBrowserRequest provides such a default fallback adapter. This
-adapter will apply the IDefaultBrowserLayer if no explicit default skin
-is registered for IBrowserRequest.
-
-Our test setup requires a custom default layer which we will apply to our
-request. Let's define a custm layer:
-
-  >>> class IJSONDefaultLayer(zope.interface.Interface):
-  ...     """JSON default layyer."""
-
-To illustrate, we'll first use setDefaultSkin without a registered
-IDefaultSkin adapter:
-
-  >>> IJSONDefaultLayer.providedBy(request)
-  False
-
-If we try to set a default skin and no one exist we will not fail but
-nothing happens
-
-  >>> from zope.publisher.skinnable import setDefaultSkin
-  >>> setDefaultSkin(request)
-
-Make sure our IJSONDefaultLayer provides the ISkinType interface.
-This is normaly done in a configure.zcml using the interface directive:
-
-  >>> ISkinType.providedBy(IJSONDefaultLayer)
-  False
-
-  >>> zope.interface.alsoProvides(IJSONDefaultLayer, ISkinType)
-  >>> ISkinType.providedBy(IJSONDefaultLayer)
-  True
-
-Now let's examine what can happen with our legacy case: an interface is
-registered as an adapter.
-
-  >>> from zope.publisher.interfaces import IDefaultSkin
-  >>> sm = zope.component.getSiteManager()
-  >>> sm.registerAdapter(
-  ...     IJSONDefaultLayer, (IJSONRequest,), IDefaultSkin, name='default')
-  >>> request = JSONRequest(StringIO(''), {})
-  >>> IJSONDefaultLayer.providedBy(request)
-  False
-  >>> setDefaultSkin(request)
-  >>> IJSONDefaultLayer.providedBy(request)
-  True
-
-What if the request already provides the interface?
-
-  >>> IJSONDefaultLayer.providedBy(request)
-  True
-  >>> setDefaultSkin(request)
-  >>> IJSONDefaultLayer.providedBy(request)
-  True
-
-Now let's define a default skin adapter which the setDefaultSkin can use. This
-adapter return our IJSONDefaultLayer. We also register this adapter within
-``default`` as name:
-
-  >>> def getDefaultJSONLayer(request):
-  ...     return IJSONDefaultLayer
-
-  >>> zope.component.provideAdapter(getDefaultJSONLayer,
-  ...     (IJSONRequest,), IDefaultSkin, name='default')
-
-  >>> setDefaultSkin(request)
-  >>> IJSONDefaultLayer.providedBy(request)
-  True
-
-When we register a default skin, without that the skin provides an ISkinType,
-the setDefaultSkin will raise a TypeError:
-
-
-  >>> from zope.interface import Interface
-  >>> class IMySkin(Interface):
-  ...     pass
-  >>> zope.component.provideAdapter(IMySkin, (IJSONRequest,), IDefaultSkin)
-  >>> setDefaultSkin(request)
-  Traceback (most recent call last):
-  ...
-  TypeError: Skin interface <InterfaceClass __builtin__.IMySkin> doesn't provide ISkinType
-
-The default skin must provide ISkinType:
-
-  >>> zope.interface.alsoProvides(IMySkin, ISkinType)
-  >>> ISkinType.providedBy(IMySkin)
-  True
-
-setDefaultSkin uses the custom layer interface instead of IJSONDefaultLayer:
-
-  >>> request = JSONRequest(StringIO(''), {})
-  >>> IMySkin.providedBy(request)
-  False
-
-  >>> IJSONDefaultLayer.providedBy(request)
-  False
-
-  >>> setDefaultSkin(request)
-
-  >>> IMySkin.providedBy(request)
-  True
-
-  >>> IJSONDefaultLayer.providedBy(request)
-  False
-
-Any interfaces that are directly provided by the request coming into this
-method are replaced by the applied layer/skin interface. This is important
-for our retry pattern which will ensure that we start with a clean request:
-
-  >>> request = JSONRequest(StringIO(''), {})
-  >>> class IFoo(Interface):
-  ...     pass
-
-  >>> zope.interface.directlyProvides(request, IFoo)
-  >>> IFoo.providedBy(request)
-  True
-
-  >>> setDefaultSkin(request)
-  >>> IFoo.providedBy(request)
-  False
-
-
-applySkin
----------
-
-The applySkin method is able to apply any given skin. Let's define some custom
-skins:
-
-  >>> import pprint
-  >>> from zope.interface import Interface
-  >>> class ISkinA(Interface):
-  ...     pass
-
-  >>> zope.interface.directlyProvides(ISkinA, ISkinType)
-  >>> class ISkinB(Interface):
-  ...     pass
-
-  >>> zope.interface.directlyProvides(ISkinB, ISkinType)
-
-Let's start with a fresh request:
-
-  >>> request = JSONRequest(StringIO(''), {})
-
-Now we can apply the SkinA:
-
-  >>> from zope.publisher.skinnable import applySkin
-  >>> applySkin(request, ISkinA)
-  >>> pprint.pprint(list(zope.interface.providedBy(request).interfaces()))
-  [<InterfaceClass __builtin__.ISkinA>,
-   <InterfaceClass __builtin__.IJSONRequest>,
-   <InterfaceClass zope.publisher.interfaces.IRequest>]
-
-And if we apply ISkinB, ISkinA get removed at the same time ISkinB get applied:
-
-  >>> applySkin(request, ISkinB)
-  >>> pprint.pprint(list(zope.interface.providedBy(request).interfaces()))
-  [<InterfaceClass __builtin__.ISkinB>,
-   <InterfaceClass __builtin__.IJSONRequest>,
-   <InterfaceClass zope.publisher.interfaces.IRequest>]
-
-
-setDefaultSkin and applySkin
-----------------------------
-
-If we set a default skin and later apply a custom skin, the default skin get
-removed at the time the applySkin get called within a new ISkinType:
-
-  >>> request = JSONRequest(StringIO(''), {})
-
-Note, that our IMySkin is the default skin for IJSONRequest. We can aprove that
-by lookup an IDefaultSkin interface for our request:
-
-  >>> adapters = zope.component.getSiteManager().adapters
-  >>> default = adapters.lookup((zope.interface.providedBy(request),),
-  ...     IDefaultSkin, '')
-  >>> default
-  <InterfaceClass __builtin__.IMySkin>
-
-  >>> setDefaultSkin(request)
-  >>> IMySkin.providedBy(request)
-  True
-
-  >>> ISkinA.providedBy(request)
-  False
-
-Now apply our skin ISkinA. This should remove the IMySkin at the same time the
-ISkinA get applied:
-
-  >>> applySkin(request, ISkinA)
-  >>> IMySkin.providedBy(request)
-  False
-
-  >>> ISkinA.providedBy(request)
-  True
-
-
-SkinChangedEvent
-----------------
-
-Changing the skin on a request triggers the ISkinChangedEvent event:
-
-  >>> import zope.component
-  >>> from zope.publisher.interfaces import ISkinChangedEvent
-  >>> def receiveSkinEvent(event):
-  ...     print "Notified SkinEvent for:", event.request.__class__.__name__
-  >>> zope.component.provideHandler(receiveSkinEvent, (ISkinChangedEvent,))
-  >>> applySkin(request, ISkinA)
-  Notified SkinEvent for: JSONRequest
+=========
+Skinnable
+=========
+
+Requests can provide skins. But what exactly is a skin? At the code
+level, a skin is just an interface which a request provides. Why do we
+need skins? We can use skins for registering different adapters.
+
+That's a little bit much use of the word skin. Let's explain it in more
+detail. A skin is an interface which provides an interface. This
+interface is called ISkinType. The zope.publisher right now provides
+only one specific skin type interface used in the IBrowserRequest
+implementation. This interface is called BrowserSkinType.
+
+Since the zope server provides request factories for building a request,
+each such request type could provide it's own skin type interface. This
+ensures that we can register a skin type for each request.
+
+Now let's look at a higher level. A skin is a concept which we can use
+for providing different kinds of views, templates or other adapters
+adapting a request. These skins are the key component for providing
+different kind of application layers. A skin makes it possible for
+an application to act very differently with each skin. Of course, that's
+only the case at the interaction level where the request is involved.
+But that's the case most of the time since we have a web application
+server.
+
+Another part of the skinnable concept is that an application can define
+zero or more default skins. This is done with the IDefaultSkin
+interface. Default skins can be defined for request interfaces or
+implementations. Such a default skin can get overriden in a custom
+setup. Overriding a skin can be done by using the defaultSkin directive
+offered from zope.app.publication.zcml.
+
+Why does a request need a default skin? If a request needs to provide
+some pluggable concepts that require that a default adapter is
+registered for a request, this adapter could be registered for the
+default skin. If a project likes to use another pattern and needs to
+register another request adapter, the project could register its own
+skin and register the custom adapter for this new project based skin.
+This is very handy and allows developers to skip a complete
+default-skin-based setup for a given request.
+
+In general, this means a request interface and the request class that
+implements the request interface only provides the basic API but no
+adapters if the request needs to delegate things to an adapter. For such
+a request a default skin can get defined. This default skin can provide
+all adapters which the request implementation needs to have. This gives
+us the option to replace the default skin within a custom skin and
+provide custom adapters.
+
+Our exmple will define a full request and all its components from scratch.
+it doesn't depend on IBrowserRequest. We'll use a JSON-RPC as sample like
+the z3c.jsonrpc package provides.
+
+Layers and Skins
+----------------
+
+We also use the term "layer" if we talk about skins. A layer or skin
+layer is an interface registered as a ISkinType without a name. Zope
+provides a traversal pattern which allows traversal to a skin within a
+skin namespace called ``skin``. This allows traversal to a method called
+``applySkin`` which will apply a registered named skin. This means if we
+register an ISkinType with a name argument, we will register a skin. if
+we register a ISkinType without a name just we register a layer. This
+means, layers are not traversable ISkinType interfaces.
+
+Let's start define a request:
+
+  >>> from zope.publisher.interfaces import IRequest
+  >>> class IJSONRequest(IRequest):
+  ...     """JSON request."""
+
+And we define a skin type:
+
+  >>> from zope.publisher.interfaces import ISkinType
+  >>> class IJSONSkinType(ISkinType):
+  ...     """JSON skin type."""
+
+A request would implement the IJSONRequest interface but not the request type
+interface:
+
+  >>> import zope.interface
+  >>> from zope.publisher.base import BaseRequest
+  >>> class JSONRequest(BaseRequest):
+  ...     """JSON request implementation."""
+  ...     zope.interface.implements(IJSONRequest)
+
+Now our request provides IJSONRequest because it implement that interface:
+
+  >>> from StringIO import StringIO
+  >>> request = JSONRequest(StringIO(''), {})
+  >>> IJSONRequest.providedBy(request)
+  True
+
+
+setDefaultSkin
+--------------
+
+The default skin is a marker interface that can be registered as an
+adapter that provides IDefaultSkin for the request type. A default skin
+interface like any other skin must also provide ISkinType. This is
+important since applySkin will lookup for skins based on this type.
+
+Note: Any interfaces that are directly provided by the request coming into
+this method are replaced by the applied layer/skin interface. This is very
+important since the retry pattern can use a clean request without any
+directly provided interface after a retry gets started.
+
+If a default skin is not available, the fallback default skin is applied
+if available for the given request type. The default fallback skin is
+implemented as an named adapter factory providing IDefaultSkin and
+using ``default`` as name.
+
+Important to know is that some skin adapters get registered as interfaces
+and the fallback skins as adapters. See the defaultSkin directive in
+zope.app.publication.zcml for more information.  It registers plain
+interfaces as adapters which are not adaptable.  We have special code to
+handle this case, which we will demonstrate below.
+
+Each request can only have one (unnamed) default skin and will fallback to
+the named (default) fallback skin if available.
+
+Only the IBrowserRequest provides such a default fallback adapter. This
+adapter will apply the IDefaultBrowserLayer if no explicit default skin
+is registered for IBrowserRequest.
+
+Our test setup requires a custom default layer which we will apply to our
+request. Let's define a custm layer:
+
+  >>> class IJSONDefaultLayer(zope.interface.Interface):
+  ...     """JSON default layyer."""
+
+To illustrate, we'll first use setDefaultSkin without a registered
+IDefaultSkin adapter:
+
+  >>> IJSONDefaultLayer.providedBy(request)
+  False
+
+If we try to set a default skin and no one exist we will not fail but
+nothing happens
+
+  >>> from zope.publisher.skinnable import setDefaultSkin
+  >>> setDefaultSkin(request)
+
+Make sure our IJSONDefaultLayer provides the ISkinType interface.
+This is normaly done in a configure.zcml using the interface directive:
+
+  >>> ISkinType.providedBy(IJSONDefaultLayer)
+  False
+
+  >>> zope.interface.alsoProvides(IJSONDefaultLayer, ISkinType)
+  >>> ISkinType.providedBy(IJSONDefaultLayer)
+  True
+
+Now let's examine what can happen with our legacy case: an interface is
+registered as an adapter.
+
+  >>> from zope.publisher.interfaces import IDefaultSkin
+  >>> sm = zope.component.getSiteManager()
+  >>> sm.registerAdapter(
+  ...     IJSONDefaultLayer, (IJSONRequest,), IDefaultSkin, name='default')
+  >>> request = JSONRequest(StringIO(''), {})
+  >>> IJSONDefaultLayer.providedBy(request)
+  False
+  >>> setDefaultSkin(request)
+  >>> IJSONDefaultLayer.providedBy(request)
+  True
+
+What if the request already provides the interface?
+
+  >>> IJSONDefaultLayer.providedBy(request)
+  True
+  >>> setDefaultSkin(request)
+  >>> IJSONDefaultLayer.providedBy(request)
+  True
+
+Now let's define a default skin adapter which the setDefaultSkin can use. This
+adapter return our IJSONDefaultLayer. We also register this adapter within
+``default`` as name:
+
+  >>> def getDefaultJSONLayer(request):
+  ...     return IJSONDefaultLayer
+
+  >>> zope.component.provideAdapter(getDefaultJSONLayer,
+  ...     (IJSONRequest,), IDefaultSkin, name='default')
+
+  >>> setDefaultSkin(request)
+  >>> IJSONDefaultLayer.providedBy(request)
+  True
+
+When we register a default skin, without that the skin provides an ISkinType,
+the setDefaultSkin will raise a TypeError:
+
+
+  >>> from zope.interface import Interface
+  >>> class IMySkin(Interface):
+  ...     pass
+  >>> zope.component.provideAdapter(IMySkin, (IJSONRequest,), IDefaultSkin)
+  >>> setDefaultSkin(request)
+  Traceback (most recent call last):
+  ...
+  TypeError: Skin interface <InterfaceClass __builtin__.IMySkin> doesn't provide ISkinType
+
+The default skin must provide ISkinType:
+
+  >>> zope.interface.alsoProvides(IMySkin, ISkinType)
+  >>> ISkinType.providedBy(IMySkin)
+  True
+
+setDefaultSkin uses the custom layer interface instead of IJSONDefaultLayer:
+
+  >>> request = JSONRequest(StringIO(''), {})
+  >>> IMySkin.providedBy(request)
+  False
+
+  >>> IJSONDefaultLayer.providedBy(request)
+  False
+
+  >>> setDefaultSkin(request)
+
+  >>> IMySkin.providedBy(request)
+  True
+
+  >>> IJSONDefaultLayer.providedBy(request)
+  False
+
+Any interfaces that are directly provided by the request coming into this
+method are replaced by the applied layer/skin interface. This is important
+for our retry pattern which will ensure that we start with a clean request:
+
+  >>> request = JSONRequest(StringIO(''), {})
+  >>> class IFoo(Interface):
+  ...     pass
+
+  >>> zope.interface.directlyProvides(request, IFoo)
+  >>> IFoo.providedBy(request)
+  True
+
+  >>> setDefaultSkin(request)
+  >>> IFoo.providedBy(request)
+  False
+
+
+applySkin
+---------
+
+The applySkin method is able to apply any given skin. Let's define some custom
+skins:
+
+  >>> import pprint
+  >>> from zope.interface import Interface
+  >>> class ISkinA(Interface):
+  ...     pass
+
+  >>> zope.interface.directlyProvides(ISkinA, ISkinType)
+  >>> class ISkinB(Interface):
+  ...     pass
+
+  >>> zope.interface.directlyProvides(ISkinB, ISkinType)
+
+Let's start with a fresh request:
+
+  >>> request = JSONRequest(StringIO(''), {})
+
+Now we can apply the SkinA:
+
+  >>> from zope.publisher.skinnable import applySkin
+  >>> applySkin(request, ISkinA)
+  >>> pprint.pprint(list(zope.interface.providedBy(request).interfaces()))
+  [<InterfaceClass __builtin__.ISkinA>,
+   <InterfaceClass __builtin__.IJSONRequest>,
+   <InterfaceClass zope.publisher.interfaces.IRequest>]
+
+And if we apply ISkinB, ISkinA get removed at the same time ISkinB get applied:
+
+  >>> applySkin(request, ISkinB)
+  >>> pprint.pprint(list(zope.interface.providedBy(request).interfaces()))
+  [<InterfaceClass __builtin__.ISkinB>,
+   <InterfaceClass __builtin__.IJSONRequest>,
+   <InterfaceClass zope.publisher.interfaces.IRequest>]
+
+
+setDefaultSkin and applySkin
+----------------------------
+
+If we set a default skin and later apply a custom skin, the default skin get
+removed at the time the applySkin get called within a new ISkinType:
+
+  >>> request = JSONRequest(StringIO(''), {})
+
+Note, that our IMySkin is the default skin for IJSONRequest. We can aprove that
+by lookup an IDefaultSkin interface for our request:
+
+  >>> adapters = zope.component.getSiteManager().adapters
+  >>> default = adapters.lookup((zope.interface.providedBy(request),),
+  ...     IDefaultSkin, '')
+  >>> default
+  <InterfaceClass __builtin__.IMySkin>
+
+  >>> setDefaultSkin(request)
+  >>> IMySkin.providedBy(request)
+  True
+
+  >>> ISkinA.providedBy(request)
+  False
+
+Now apply our skin ISkinA. This should remove the IMySkin at the same time the
+ISkinA get applied:
+
+  >>> applySkin(request, ISkinA)
+  >>> IMySkin.providedBy(request)
+  False
+
+  >>> ISkinA.providedBy(request)
+  True
+
+
+SkinChangedEvent
+----------------
+
+Changing the skin on a request triggers the ISkinChangedEvent event:
+
+  >>> import zope.component
+  >>> from zope.publisher.interfaces import ISkinChangedEvent
+  >>> def receiveSkinEvent(event):
+  ...     print "Notified SkinEvent for:", event.request.__class__.__name__
+  >>> zope.component.provideHandler(receiveSkinEvent, (ISkinChangedEvent,))
+  >>> applySkin(request, ISkinA)
+  Notified SkinEvent for: JSONRequest

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_browser.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_browser.py	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_browser.py	2010-04-16 19:13:22 UTC (rev 110994)
@@ -16,7 +16,7 @@
 $Id$
 """
 import unittest
-from zope.testing.doctestunit import DocTestSuite
+from doctest import DocTestSuite
 
 __docformat__ = "reStructuredText"
 

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_defaultview.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_defaultview.py	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_defaultview.py	2010-04-16 19:13:22 UTC (rev 110994)
@@ -16,8 +16,8 @@
 $Id$
 """
 import unittest
+from doctest import DocTestSuite
 from zope.testing.cleanup import cleanUp
-from zope.testing.doctestunit import DocTestSuite
 
 def cleanUpDoc(args):
     cleanUp()

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_http.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_http.py	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_http.py	2010-04-16 19:13:22 UTC (rev 110994)
@@ -21,11 +21,11 @@
 import unittest
 from cStringIO import StringIO
 from Cookie import CookieError
+from doctest import DocFileSuite
 
 import zope.event
 import zope.testing.cleanup
 from zope.component import provideAdapter
-from zope.testing import doctest
 from zope.i18n.interfaces.locales import ILocale
 from zope.interface.verify import verifyObject
 from zope.security.checker import ProxyFactory
@@ -936,7 +936,7 @@
     suite.addTest(unittest.makeSuite(ConcreteHTTPTests))
     suite.addTest(unittest.makeSuite(TestHTTPResponse))
     suite.addTest(unittest.makeSuite(HTTPInputStreamTests))
-    suite.addTest(doctest.DocFileSuite(
+    suite.addTest(DocFileSuite(
         '../httpresults.txt', setUp=cleanUp, tearDown=cleanUp))
     suite.addTest(unittest.makeSuite(APITests))
     return suite

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_paste.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_paste.py	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_paste.py	2010-04-16 19:13:22 UTC (rev 110994)
@@ -12,7 +12,8 @@
 #
 ##############################################################################
 import re, unittest
-from zope.testing import doctest, renormalizing
+import doctest
+from zope.testing import renormalizing
 
 class SamplePublication:
 

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_skinnable.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_skinnable.py	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_skinnable.py	2010-04-16 19:13:22 UTC (rev 110994)
@@ -16,8 +16,8 @@
 
 $Id: test_http.py 96537 2009-02-14 15:13:58Z benji_york $
 """
-
 import unittest
+import doctest
 import zope.testing
 
 
@@ -27,7 +27,7 @@
 
 def test_suite():
     return unittest.TestSuite(
-        zope.testing.doctest.DocFileSuite('../skinnable.txt',
+        doctest.DocFileSuite('../skinnable.txt',
             setUp=cleanUp, tearDown=cleanUp))
 
 

Modified: zope.publisher/trunk/src/zope/publisher/tests/test_xmlrpc.py
===================================================================
--- zope.publisher/trunk/src/zope/publisher/tests/test_xmlrpc.py	2010-04-16 18:53:41 UTC (rev 110993)
+++ zope.publisher/trunk/src/zope/publisher/tests/test_xmlrpc.py	2010-04-16 19:13:22 UTC (rev 110994)
@@ -15,9 +15,9 @@
 
 $Id$
 """
+import doctest
 import xmlrpclib
 import zope.component.testing
-from zope.testing import doctest
 from zope.publisher import xmlrpc
 from zope.security.checker import defineChecker, Checker, CheckerPublic
 



More information about the checkins mailing list