[Zope-Checkins] SVN: Zope/branches/z4-zmi/ re-enable the ++skin++ traverser

Christian Theune ct at gocept.com
Wed Nov 16 10:34:18 UTC 2011


Log message for revision 123366:
  re-enable the ++skin++ traverser
  

Changed:
  U   Zope/branches/z4-zmi/doc/CHANGES.rst
  A   Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.py
  A   Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.txt
  A   Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.zcml
  A   Zope/branches/z4-zmi/src/Products/Five/browser/tests/test_skin.py
  U   Zope/branches/z4-zmi/src/Zope2/App/traversing.zcml

-=-
Modified: Zope/branches/z4-zmi/doc/CHANGES.rst
===================================================================
--- Zope/branches/z4-zmi/doc/CHANGES.rst	2011-11-16 10:33:38 UTC (rev 123365)
+++ Zope/branches/z4-zmi/doc/CHANGES.rst	2011-11-16 10:34:17 UTC (rev 123366)
@@ -124,15 +124,6 @@
   `lib/python` and `Products` from the default. You can continue to manually
   add these back.
 
-- Removed the rarely used support for the `++skin++` traverser. You can enable
-  it in your own applications by defining::
-
-    <adapter
-      name="skin"
-      for="* zope.publisher.interfaces.IRequest"
-      provides="zope.traversing.interfaces.ITraversable"
-      factory="zope.traversing.namespace.skin" />
-
 - Five.browser: Marked `processInputs` and `setPageEncoding` as deprecated.
   `processInputs` was replaced by the `postProcessInputs` request method and
   the charset negotiation done by `setPageEncoding` was never fully supported.

Copied: Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.py (from rev 122055, Zope/trunk/src/Products/Five/browser/tests/skin.py)
===================================================================
--- Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.py	                        (rev 0)
+++ Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.py	2011-11-16 10:34:17 UTC (rev 123366)
@@ -0,0 +1,20 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Test skins
+"""
+
+from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+class ITestSkin(IDefaultBrowserLayer):
+    pass

Copied: Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.txt (from rev 122055, Zope/trunk/src/Products/Five/browser/tests/skin.txt)
===================================================================
--- Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.txt	                        (rev 0)
+++ Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.txt	2011-11-16 10:34:17 UTC (rev 123366)
@@ -0,0 +1,54 @@
+Test layer and skin support
+===========================
+
+Let's register a test layer and test skin:
+
+  >>> import Products.Five.browser.tests
+  >>> from Zope2.App import zcml
+  >>> zcml.load_config("configure.zcml", Products.Five)
+  >>> zcml.load_config("skin.zcml", package=Products.Five.browser.tests)
+
+Let's add a test object that we'll access the test page from:
+
+  >>> from Products.Five.tests.testing.simplecontent import manage_addSimpleContent
+  >>> manage_addSimpleContent(self.folder, 'testoid', 'Testoid')
+
+The view was registered on a different layer than 'default', that's
+why we can't access it straight away:
+
+  >>> print http(r"""
+  ... GET /test_folder_1_/testoid/eagle.html HTTP/1.1
+  ... """)
+  HTTP/1.1 404 Not Found
+  ...
+
+It works when we explicitly use the skin that includes that layer:
+
+  >>> print http(r"""
+  ... GET /test_folder_1_/testoid/++skin++TestSkin/eagle.html HTTP/1.1
+  ... """)
+  HTTP/1.1 200 OK
+  ...
+  The eagle has landed
+
+Or when we make that skin the default skin:
+
+  >>> zcml.load_string('''
+  ...   <browser:defaultSkin
+  ...       xmlns:browser="http://namespaces.zope.org/browser"
+  ...       name="TestSkin" />
+  ... ''')
+
+  >>> print http(r"""
+  ... GET /test_folder_1_/testoid/eagle.html HTTP/1.1
+  ... """)
+  HTTP/1.1 200 OK
+  ...
+  The eagle has landed
+
+
+Clean up
+--------
+
+  >>> from zope.component.testing import tearDown
+  >>> tearDown()

Copied: Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.zcml (from rev 122055, Zope/trunk/src/Products/Five/browser/tests/skin.zcml)
===================================================================
--- Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.zcml	                        (rev 0)
+++ Zope/branches/z4-zmi/src/Products/Five/browser/tests/skin.zcml	2011-11-16 10:34:17 UTC (rev 123366)
@@ -0,0 +1,23 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:meta="http://namespaces.zope.org/meta"
+           xmlns:browser="http://namespaces.zope.org/browser">
+
+  <!-- make the zope2.Public permission work -->
+  <meta:redefinePermission from="zope2.Public" to="zope.Public" />
+
+  <interface
+      interface=".skin.ITestSkin"
+      type="zope.publisher.interfaces.browser.IBrowserSkinType"
+      name="TestSkin"
+      />
+
+  <browser:page
+      for="Products.Five.tests.testing.simplecontent.ISimpleContent"
+      class=".pages.SimpleView"
+      attribute="eagle"
+      name="eagle.html"
+      permission="zope2.Public"
+      layer=".skin.ITestSkin"
+      />
+
+</configure>

Copied: Zope/branches/z4-zmi/src/Products/Five/browser/tests/test_skin.py (from rev 122055, Zope/trunk/src/Products/Five/browser/tests/test_skin.py)
===================================================================
--- Zope/branches/z4-zmi/src/Products/Five/browser/tests/test_skin.py	                        (rev 0)
+++ Zope/branches/z4-zmi/src/Products/Five/browser/tests/test_skin.py	2011-11-16 10:34:17 UTC (rev 123366)
@@ -0,0 +1,20 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Test browser pages
+"""
+
+def test_suite():
+    from Testing.ZopeTestCase import FunctionalDocFileSuite
+    return FunctionalDocFileSuite('skin.txt',
+                                  package='Products.Five.browser.tests')

Modified: Zope/branches/z4-zmi/src/Zope2/App/traversing.zcml
===================================================================
--- Zope/branches/z4-zmi/src/Zope2/App/traversing.zcml	2011-11-16 10:33:38 UTC (rev 123365)
+++ Zope/branches/z4-zmi/src/Zope2/App/traversing.zcml	2011-11-16 10:34:17 UTC (rev 123366)
@@ -38,6 +38,13 @@
       />
 
   <adapter
+      name="skin"
+      for="* zope.publisher.interfaces.IRequest"
+      provides="zope.traversing.interfaces.ITraversable"
+      factory="zope.traversing.namespace.skin"
+      />
+
+  <adapter
       name="resource"
       for="* zope.publisher.interfaces.IRequest"
       provides="zope.traversing.interfaces.ITraversable"



More information about the Zope-Checkins mailing list