[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