[Twisted-web] web2: handling data from an http PUT request?
Allan Bailey
allan at nefud.org
Fri Aug 11 13:08:58 CDT 2006
Does anyone have an example of how to handle data from an http PUT method?
So far I'm only getting partial data from the below example.
Note: I'm fairly new to twisted and using deferred's. So if I'm missing something
please let me know, or send pointers.
thanks,
-allan
================
##
class HOME(resource.Resource):
addSlash = True
def allowedMethods(self):
return ('GET', 'HEAD', 'OPTIONS', 'PUT')
def locateChild(self, req, segments):
return (self, server.StopTraversal)
def render_PUT(self, req):
content = "<html><body>\n"
content += "<hr>\n"
content += "method: %s<br>\n" % req.method
content += "uri: %s<br>\n" % req.uri
content += "path: %s<br>\n" % req.path
content += "dir(req): %s<br>\n" % dir(req)
content += "<hr>\n"
content += "args: %s<br>\n" % req.args
content += "<hr>data from PUT:\n\n<hr>\n\n%s\n\n<hr>\n"
content +="</body></html>\n"
print req.stream
print dir(req.stream)
data = req.stream.read()
if type(data) == type(""):
# this never happens, seems to always be a deferred. dunno why.
content = content % data
return http.Response(responsecode.OK, stream=content)
elif isinstance(data, defer.Deferred):
def _pull(result, send=content):
# result should be a string of data.
send = send % result
return http.Response(responsecode.OK, stream=send)
d = data.addCallback(_pull, content)
return d
else:
raise 'FixMe'
#return None
#
def http_PUT(self, req):
return self.render_PUT(req)
--
Allan
More information about the Twisted-web
mailing list