[Checkins] SVN: Zope/trunk/ Moved the ``absoluteurl`` views into the OFS package.

Hanno Schlichting hannosch at hannosch.eu
Tue Mar 30 19:23:32 EDT 2010


Log message for revision 110346:
  Moved the ``absoluteurl`` views into the OFS package.
  

Changed:
  U   Zope/trunk/doc/CHANGES.rst
  A   Zope/trunk/src/OFS/absoluteurl.py
  A   Zope/trunk/src/OFS/absoluteurl.zcml
  U   Zope/trunk/src/Products/Five/browser/absoluteurl.py
  U   Zope/trunk/src/Products/Five/browser/configure.zcml

-=-
Modified: Zope/trunk/doc/CHANGES.rst
===================================================================
--- Zope/trunk/doc/CHANGES.rst	2010-03-30 23:05:20 UTC (rev 110345)
+++ Zope/trunk/doc/CHANGES.rst	2010-03-30 23:23:32 UTC (rev 110346)
@@ -11,6 +11,8 @@
 Restructuring
 +++++++++++++
 
+- Moved the ``absoluteurl`` views into the OFS package.
+
 - Moved ``testbrowser`` module into the Testing package.
 
 - Moved the code handling ZCML loading into the ``Zope2.App`` package. The

Copied: Zope/trunk/src/OFS/absoluteurl.py (from rev 110303, Zope/trunk/src/Products/Five/browser/absoluteurl.py)
===================================================================
--- Zope/trunk/src/OFS/absoluteurl.py	                        (rev 0)
+++ Zope/trunk/src/OFS/absoluteurl.py	2010-03-30 23:23:32 UTC (rev 110346)
@@ -0,0 +1,139 @@
+##############################################################################
+#
+# Copyright (c) 2004, 2005 Zope Corporation 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.
+#
+##############################################################################
+
+import urllib
+from Acquisition import aq_parent
+from OFS.interfaces import ITraversable
+
+from zope.component import getMultiAdapter
+from zope.interface import implements
+from zope.traversing.browser.interfaces import IAbsoluteURL
+from zope.traversing.browser.absoluteurl import _insufficientContext, _safe
+from zope.publisher.browser import BrowserView
+
+
+class AbsoluteURL(BrowserView):
+    """An absolute_url adapter for generic objects in Zope 2 that
+    aren't OFS.Traversable (e.g. views, resources, etc.).
+
+    This is very close to the generic implementation from
+    zope.traversing.browser, but the Zope 2 request doesn't support
+    all the methods that it uses yet.
+    """
+    implements(IAbsoluteURL)
+
+    def __unicode__(self):
+        return urllib.unquote(self.__str__()).decode('utf-8')
+
+    def __str__(self):
+        context = self.context
+        request = self.request
+
+        container = aq_parent(context)
+        if container is None:
+            raise TypeError(_insufficientContext)
+
+        url = str(getMultiAdapter((container, request), name='absolute_url'))
+        name = self._getContextName(context)
+        if name is None:
+            raise TypeError(_insufficientContext)
+
+        if name:
+            url += '/' + urllib.quote(name.encode('utf-8'), _safe)
+
+        return url
+
+    __call__ = __str__
+
+    def _getContextName(self, context):
+        if getattr(context, 'getId', None) is not None:
+            return context.getId()
+        return getattr(context, '__name__', None)
+
+    def breadcrumbs(self):
+        context = self.context
+        request = self.request
+
+        # We do this here do maintain the rule that we must be wrapped
+        container = aq_parent(context)
+        if container is None:
+            raise TypeError(_insufficientContext)
+
+        base = tuple(getMultiAdapter((container, request),
+                                     name='absolute_url').breadcrumbs())
+
+        name = self._getContextName(context)
+        if name is None:
+            raise TypeError(_insufficientContext)
+
+        if name:
+            base += ({'name': name,
+                      'url': ("%s/%s" % (base[-1]['url'],
+                                         urllib.quote(name.encode('utf-8'),
+                                                      _safe)))
+                      }, )
+
+        return base
+
+
+class OFSTraversableAbsoluteURL(BrowserView):
+    """An absolute_url adapter for OFS.Traversable subclasses
+    """
+    implements(IAbsoluteURL)
+
+    def __unicode__(self):
+        return urllib.unquote(self.__str__()).decode('utf-8')
+
+    def __str__(self):
+        return self.context.absolute_url()
+
+    __call__ = __str__
+
+    def breadcrumbs(self):
+        context = self.context
+        container = aq_parent(context)
+        request = self.request
+
+        name = context.getId()
+        
+        if (container is None
+            or self._isVirtualHostRoot()
+            or not ITraversable.providedBy(container)):
+            return ({'name': name, 'url': context.absolute_url()},)
+
+        view = getMultiAdapter((container, request), IAbsoluteURL)
+        base = tuple(view.breadcrumbs())
+        base += (
+            {'name': name, 'url': ("%s/%s" % (base[-1]['url'], name))},)
+
+        return base
+
+    def _isVirtualHostRoot(self):
+        virtualrootpath = self.request.get('VirtualRootPhysicalPath', None)
+        if virtualrootpath is None:
+            return False
+        context = self.context
+        return context.restrictedTraverse(virtualrootpath) == context
+
+
+class RootAbsoluteURL(OFSTraversableAbsoluteURL):
+    """An absolute_url adapter for the root object (OFS.Application)
+    """
+    def breadcrumbs(self):
+        context = self.context
+        request = self.request
+
+        return ({'name': context.getId(),
+                 'url': context.absolute_url()
+                 },)

Added: Zope/trunk/src/OFS/absoluteurl.zcml
===================================================================
--- Zope/trunk/src/OFS/absoluteurl.zcml	                        (rev 0)
+++ Zope/trunk/src/OFS/absoluteurl.zcml	2010-03-30 23:23:32 UTC (rev 110346)
@@ -0,0 +1,52 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+           xmlns:browser="http://namespaces.zope.org/browser">
+
+  <browser:page
+      for="*"
+      name="absolute_url"
+      class=".absoluteurl.AbsoluteURL"
+      permission="zope.Public"
+      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
+      />
+
+  <view
+      for="*"
+      factory=".absoluteurl.AbsoluteURL"
+      type="zope.publisher.interfaces.http.IHTTPRequest"
+      permission="zope.Public"
+      provides="zope.traversing.browser.interfaces.IAbsoluteURL"
+      />
+
+  <browser:page
+      for=".interfaces.ITraversable"
+      name="absolute_url"
+      class=".absoluteurl.OFSTraversableAbsoluteURL"
+      permission="zope.Public"
+      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
+      />
+
+  <view
+      for=".interfaces.ITraversable"
+      factory=".absoluteurl.OFSTraversableAbsoluteURL"
+      type="zope.publisher.interfaces.http.IHTTPRequest"
+      permission="zope.Public"
+      provides="zope.traversing.browser.interfaces.IAbsoluteURL"
+      />
+
+  <browser:page
+      for=".interfaces.IApplication"
+      name="absolute_url"
+      class=".absoluteurl.RootAbsoluteURL"
+      permission="zope.Public"
+      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
+      />
+
+  <view
+      for=".interfaces.IApplication"
+      factory=".absoluteurl.RootAbsoluteURL"
+      type="zope.publisher.interfaces.http.IHTTPRequest"
+      permission="zope.Public"
+      provides="zope.traversing.browser.interfaces.IAbsoluteURL"
+      />
+
+</configure>


Property changes on: Zope/trunk/src/OFS/absoluteurl.zcml
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: Zope/trunk/src/Products/Five/browser/absoluteurl.py
===================================================================
--- Zope/trunk/src/Products/Five/browser/absoluteurl.py	2010-03-30 23:05:20 UTC (rev 110345)
+++ Zope/trunk/src/Products/Five/browser/absoluteurl.py	2010-03-30 23:23:32 UTC (rev 110346)
@@ -11,131 +11,11 @@
 # FOR A PARTICULAR PURPOSE.
 #
 ##############################################################################
-"""Absolute URL
 
-$Id$
-"""
-import urllib
-from Acquisition import aq_inner, aq_parent
-from OFS.interfaces import ITraversable
+from zope.deferredimport import deprecated
 
-from zope.interface import implements
-from zope.component import getMultiAdapter
-from zope.traversing.browser.interfaces import IAbsoluteURL
-from zope.traversing.browser.absoluteurl import _insufficientContext, _safe
-
-from Products.Five.browser import BrowserView
-
-class AbsoluteURL(BrowserView):
-    """An absolute_url adapter for generic objects in Zope 2 that
-    aren't OFS.Traversable (e.g. views, resources, etc.).
-
-    This is very close to the generic implementation from
-    zope.traversing.browser, but the Zope 2 request doesn't support
-    all the methods that it uses yet.
-    """
-    implements(IAbsoluteURL)
-
-    def __unicode__(self):
-        return urllib.unquote(self.__str__()).decode('utf-8')
-
-    def __str__(self):
-        context = self.context
-        request = self.request
-
-        container = aq_parent(context)
-        if container is None:
-            raise TypeError(_insufficientContext)
-
-        url = str(getMultiAdapter((container, request), name='absolute_url'))
-        name = self._getContextName(context)
-        if name is None:
-            raise TypeError(_insufficientContext)
-
-        if name:
-            url += '/' + urllib.quote(name.encode('utf-8'), _safe)
-
-        return url
-
-    __call__ = __str__
-
-    def _getContextName(self, context):
-        if getattr(context, 'getId', None) is not None:
-            return context.getId()
-        return getattr(context, '__name__', None)
-
-    def breadcrumbs(self):
-        context = self.context
-        request = self.request
-
-        # We do this here do maintain the rule that we must be wrapped
-        container = aq_parent(context)
-        if container is None:
-            raise TypeError(_insufficientContext)
-
-        base = tuple(getMultiAdapter((container, request),
-                                     name='absolute_url').breadcrumbs())
-
-        name = self._getContextName(context)
-        if name is None:
-            raise TypeError(_insufficientContext)
-
-        if name:
-            base += ({'name': name,
-                      'url': ("%s/%s" % (base[-1]['url'],
-                                         urllib.quote(name.encode('utf-8'),
-                                                      _safe)))
-                      }, )
-
-        return base
-
-class OFSTraversableAbsoluteURL(BrowserView):
-    """An absolute_url adapter for OFS.Traversable subclasses
-    """
-    implements(IAbsoluteURL)
-
-    def __unicode__(self):
-        return urllib.unquote(self.__str__()).decode('utf-8')
-
-    def __str__(self):
-        context = aq_inner(self.context)
-        return context.absolute_url()
-
-    __call__ = __str__
-
-    def breadcrumbs(self):
-        context = aq_inner(self.context)
-        container = aq_parent(context)
-        request = self.request
-
-        name = context.getId()
-        
-        if (container is None
-            or self._isVirtualHostRoot()
-            or not ITraversable.providedBy(container)):
-            return ({'name': name, 'url': context.absolute_url()},)
-
-        view = getMultiAdapter((container, request), IAbsoluteURL)
-        base = tuple(view.breadcrumbs())
-        base += (
-            {'name': name, 'url': ("%s/%s" % (base[-1]['url'], name))},)
-
-        return base
-
-    def _isVirtualHostRoot(self):
-        virtualrootpath = self.request.get('VirtualRootPhysicalPath', None)
-        if virtualrootpath is None:
-            return False
-        context = aq_inner(self.context)
-        return context.restrictedTraverse(virtualrootpath) == context
-
-class RootAbsoluteURL(OFSTraversableAbsoluteURL):
-    """An absolute_url adapter for the root object (OFS.Application)
-    """
-    def breadcrumbs(self):
-        context = self.context
-        request = self.request
-
-        return ({'name': context.getId(),
-                 'url': context.absolute_url()
-                 },)
+deprecated("Please import from OFS.absoluteurl",
+    AbsoluteURL = 'OFS.absoluteurl:AbsoluteURL',
+    OFSTraversableAbsoluteURL = 'OFS.absoluteurl:OFSTraversableAbsoluteURL',
+    RootAbsoluteURL = 'OFS.absoluteurl:RootAbsoluteURL',
+)

Modified: Zope/trunk/src/Products/Five/browser/configure.zcml
===================================================================
--- Zope/trunk/src/Products/Five/browser/configure.zcml	2010-03-30 23:05:20 UTC (rev 110345)
+++ Zope/trunk/src/Products/Five/browser/configure.zcml	2010-03-30 23:23:32 UTC (rev 110346)
@@ -5,54 +5,8 @@
       interface="zope.browsermenu.interfaces.IMenuItemType"
       />
 
-  <browser:page
-      for="*"
-      name="absolute_url"
-      class=".absoluteurl.AbsoluteURL"
-      permission="zope.Public"
-      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
+  <include package="OFS" file="absoluteurl.zcml"/>
 
-  <view
-      for="*"
-      factory=".absoluteurl.AbsoluteURL"
-      type="zope.publisher.interfaces.http.IHTTPRequest"
-      permission="zope.Public"
-      provides="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-
-  <browser:page
-      for="OFS.interfaces.ITraversable"
-      name="absolute_url"
-      class=".absoluteurl.OFSTraversableAbsoluteURL"
-      permission="zope.Public"
-      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-
-  <view
-      for="OFS.interfaces.ITraversable"
-      factory=".absoluteurl.OFSTraversableAbsoluteURL"
-      type="zope.publisher.interfaces.http.IHTTPRequest"
-      permission="zope.Public"
-      provides="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-
-  <browser:page
-      for="OFS.interfaces.IApplication"
-      name="absolute_url"
-      class=".absoluteurl.RootAbsoluteURL"
-      permission="zope.Public"
-      allowed_interface="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-
-  <view
-      for="OFS.interfaces.IApplication"
-      factory=".absoluteurl.RootAbsoluteURL"
-      type="zope.publisher.interfaces.http.IHTTPRequest"
-      permission="zope.Public"
-      provides="zope.traversing.browser.interfaces.IAbsoluteURL"
-      />
-
   <browser:view
       for="OFS.interfaces.IObjectManager"
       name="+"



More information about the checkins mailing list