[Checkins] SVN: z3c.traverser/trunk/ version bump, see CHANGES.txt

Bernd Dorn bernd.dorn at lovelysystems.com
Fri Oct 26 05:14:55 EDT 2007


Log message for revision 81117:
  version bump, see CHANGES.txt

Changed:
  U   z3c.traverser/trunk/CHANGES.txt
  U   z3c.traverser/trunk/setup.py
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt
  U   z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py

-=-
Modified: z3c.traverser/trunk/CHANGES.txt
===================================================================
--- z3c.traverser/trunk/CHANGES.txt	2007-10-25 21:57:12 UTC (rev 81116)
+++ z3c.traverser/trunk/CHANGES.txt	2007-10-26 09:14:53 UTC (rev 81117)
@@ -2,6 +2,12 @@
 Changes
 =======
 
+2007/10/26 0.2.0b2
+==================
+
+- use only absolute_url adapters in unconsumedURL caclulations, to
+  make it work for traversable viewlets or other special cases too.
+
 2007/09/21 0.2.0b1
 ==================
 

Modified: z3c.traverser/trunk/setup.py
===================================================================
--- z3c.traverser/trunk/setup.py	2007-10-25 21:57:12 UTC (rev 81116)
+++ z3c.traverser/trunk/setup.py	2007-10-26 09:14:53 UTC (rev 81117)
@@ -3,7 +3,7 @@
 
 setup(
     name = 'z3c.traverser',
-    version = '0.2.0b1',
+    version = '0.2.0b2',
     author = "Zope Community",
     author_email = "zope3-dev at zope.org",
     description = open("README.txt").read(),

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt	2007-10-25 21:57:12 UTC (rev 81116)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt	2007-10-26 09:14:53 UTC (rev 81117)
@@ -29,7 +29,9 @@
   >>> from zope import interface
   >>> class IContent(interface.Interface):
   ...     pass
-  >>> class Content(object):
+
+  >>> from zope.app.folder.folder import Folder
+  >>> class Content(Folder):
   ...     interface.implements(IContent)
 
 There is a convinience function which returns an iterator which
@@ -208,3 +210,46 @@
   >>> traversing.unconsumedURL(root['content'], request)
   'http://127.0.0.1/content/kv/k1/v1/kv/k2/v2%20space'
 
+Let us have more than one content object
+
+  >>> under = content[u'under'] = Content()
+  >>> request = TestRequest()
+  >>> traversing.unconsumedURL(under, request)
+  'http://127.0.0.1/content/under'
+
+We add some consumers to the above object
+
+  >>> request = TestRequest()
+  >>> stack = [u'index.html', u'value1', u'key1', u'kv']
+  >>> request.setTraversalStack(stack)
+  >>> traversing.applyStackConsumers(root['content'], request)
+  >>> traversing.unconsumedURL(root['content'], request)
+  'http://127.0.0.1/content/kv/key1/value1'
+  >>> traversing.unconsumedURL(under, request)
+  'http://127.0.0.1/content/kv/key1/value1/under'
+
+And now to the object below too.
+
+  >>> request = TestRequest()
+  >>> stack = [u'index.html', u'value1', u'key1', u'kv']
+  >>> request.setTraversalStack(stack)
+  >>> traversing.applyStackConsumers(root['content'], request)
+  >>> stack = [u'index.html', u'value2', u'key2', u'kv']
+  >>> request.setTraversalStack(stack)
+  >>> traversing.applyStackConsumers(under, request)
+  >>> traversing.unconsumedURL(root['content'], request)
+  'http://127.0.0.1/content/kv/key1/value1'
+  >>> traversing.unconsumedURL(under, request)
+  'http://127.0.0.1/content/kv/key1/value1/under/kv/key2/value2'
+
+Or only the object below.
+
+  >>> request = TestRequest()
+  >>> traversing.applyStackConsumers(root['content'], request)
+  >>> stack = [u'index.html', u'value2', u'key2', u'kv']
+  >>> request.setTraversalStack(stack)
+  >>> traversing.applyStackConsumers(under, request)
+  >>> traversing.unconsumedURL(root['content'], request)
+  'http://127.0.0.1/content'
+  >>> traversing.unconsumedURL(under, request)
+  'http://127.0.0.1/content/under/kv/key2/value2'

Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py	2007-10-25 21:57:12 UTC (rev 81116)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py	2007-10-26 09:14:53 UTC (rev 81117)
@@ -62,29 +62,31 @@
 
 
 def unconsumedURL(context, request):
-    consumed = list(request.annotations.get(CONSUMED_ANNOTATION_KEY))
+    url = absoluteURL(context, request)
+    consumed = request.annotations.get(CONSUMED_ANNOTATION_KEY)
     if not consumed:
-        return absoluteURL(context, request)
-    from zope.traversing import api
-    from zope.traversing.interfaces import IContainmentRoot
-    name = api.getName(context)
-    if context == request.getVirtualHostRoot():
-        items = []
-    else:
-        items = name and [name] or []
+        return url
+    inserts = []
     for obj, names in consumed:
-        if obj == context:
-            items.extend(names)
+        if obj is context:
+            # only calculate once
+            objURL = url
+        else:
+            objURL = absoluteURL(obj, request)
+        if not url.startswith(objURL):
+            # we are further down
             break
-    if IContainmentRoot.providedBy(context):
-        base = absoluteURL(context, request)
-    else:
-        base = unconsumedURL(api.getParent(context), request)
-    items = map(_encode, items)
-    if items and not base.endswith('/'):
-        base += '/'
-    return base + '/'.join(items)
+        names = '/' + '/'.join(map(_encode, names))
+        inserts.append((len(objURL), names))
 
+    offset = 0
+    for i, s in inserts:
+        oi = i + offset
+        pre = url[:oi]
+        post = url[oi:]
+        url = pre + s + post
+        offset += len(s)
+    return url
 
 class UnconsumedURL(BrowserView):
     # XXX test this



More information about the Checkins mailing list