[Checkins] SVN: z3c.traverser/trunk/src/z3c/traverser/stackinfo/
Fixed problem with virtual hosts
Jürgen Kartnaller
juergen at kartnaller.at
Sat Oct 14 08:15:50 EDT 2006
Log message for revision 70612:
Fixed problem with virtual hosts
Changed:
U z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt
U z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py
-=-
Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt 2006-10-13 15:30:13 UTC (rev 70611)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/README.txt 2006-10-14 12:15:49 UTC (rev 70612)
@@ -163,6 +163,23 @@
>>> len(ti)
0
+
+Virtual Host
+============
+
+If virtual hosts are used the traversal stack contains aditional information
+for the virtual host which will interfere which the stack consumer.
+
+ >>> stack = [u'index.html', u'value', u'key',
+ ... u'kv', u'++', u'inside vh', '++vh++something']
+ >>> request.setTraversalStack(stack)
+ >>> consumers = list(traversing.getStackConsumers(content, request))
+ >>> consumers
+ [(u'kv', <KeyValueConsumer named u'kv'>)]
+ >>> request.getTraversalStack()
+ [u'index.html', u'++', u'inside vh', '++vh++something']
+
+
URL Handling
============
Modified: z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py
===================================================================
--- z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py 2006-10-13 15:30:13 UTC (rev 70611)
+++ z3c.traverser/trunk/src/z3c/traverser/stackinfo/traversing.py 2006-10-14 12:15:49 UTC (rev 70612)
@@ -10,8 +10,34 @@
def getStackConsumers(context, request):
"""consumes the stack"""
+ class VHStack:
+ vh = []
+ def prepare(self):
+ if not self.vh:
+ stack = request.getTraversalStack()
+ if not stack:
+ return
+ name = stack[-1]
+ if name.startswith('++vh++'):
+ while True:
+ self.vh.append(stack.pop())
+ if name == '++':
+ break
+ if not stack:
+ break
+ name = stack[-1]
+ # set stack without virtual host entries
+ request.setTraversalStack(stack)
+ def reset(self):
+ if self.vh:
+ stack = request.getTraversalStack()
+ while self.vh:
+ stack.append(self.vh.pop())
+ request.setTraversalStack(stack)
+ vhStack = VHStack()
while True:
- stack = request.getTraversalStack()
+ vhStack.prepare()
+ stack = request.getTraversalStack()
if not stack:
break
name = stack[-1]
@@ -19,14 +45,15 @@
(context, request),
interface=interfaces.ITraversalStackConsumer,
name=name)
- if consumer is not None:
- try:
- consumer.consume()
- except IndexError:
- raise NotFound(context, name, request)
- yield (name, consumer)
- continue
- break
+ if consumer is None:
+ break
+ try:
+ consumer.consume()
+ except IndexError:
+ raise NotFound(context, name, request)
+ vhStack.reset()
+ yield (name, consumer)
+ vhStack.reset()
def applyStackConsumers(context, request):
if not request.annotations.has_key(CONSUMED_ANNOTATION_KEY):
@@ -51,7 +78,7 @@
return urllib.quote(v.encode('utf-8'), _safe)
def unconsumedURL(context, request):
-
+
consumed = list(request.annotations.get(CONSUMED_ANNOTATION_KEY))
if not consumed:
return absoluteURL(context, request)
@@ -82,7 +109,4 @@
return unconsumedURL(self.context, self.request)
__call__ = __str__
-
-
-
-
+
More information about the Checkins
mailing list