[Twisted-Python] Twisted Resources / PathArgs
Clark C. Evans
cce at clarkevans.com
Wed Feb 26 22:11:15 EST 2003
On Wed, Feb 26, 2003 at 11:36:33PM +0100, Mario Ruggier wrote:
| Thanks Clark, these little examples and explanations are very helpful.
Oh, glad it helped; I'm a newbie my self.
| Or, to put it differently, how can we make sure that Request acquires
| the pathargs attribute, so that all children do not have to check for
| existance?
Ok. Here is a patched one that violates a bit of encapsulation
by overriding getChildWithDefault() as well. Furthermore, this
new version returns pathargs as a list to stay consistent with args.
...
from twisted.web.resource import Resource
from twisted.internet import reactor
from twisted.web.server import Site
from twisted.web.static import File
class PathArgs(Resource):
""" Provides a mechanism to add 'pathargs' attribute to
each request, and to populate it with instances of
key:value pairs found in child paths.
"""
def getChild(self,path,request):
pair = path.split(':')
if 2 == len(pair):
(key,val) = pair
lst = request.pathargs.get(key,[])
if not lst: request.pathargs[key] = lst
lst.append(val)
return self
return Resource.getChild(self,path,request)
def getChildWithDefault(self,path,request):
if not(hasattr(request,'pathargs')):
request.pathargs = {}
return Resource.getChildWithDefault(self,path,request)
class DynamicRequest(Resource):
def isLeaf(self):
return true
def render(self, req):
req.setHeader("Content-type","text/plain")
resp = "uri: %s \nargs: %s\npathargs: %s\n"
return resp % ( req.uri, req.args, req.pathargs )
def run():
root = PathArgs()
root.putChild("dynamic", DynamicRequest())
root.putChild("static",File("."))
site = Site(root)
reactor.listenTCP(8080,site)
reactor.run()
if '__main__' == __name__:
run()
#
# And then go to...
# http://localhost:8080/key:one/key:two/another:value/dynamic?key=three
#
More information about the Twisted-Python
mailing list