greg
girty at cogeco.ca
Mon Apr 17 13:05:08 EDT 2006
Thanks Graham, for sharing your insight. A question about the example: What does the normal content handler do with the request after the fixup handler returns apache.DONE? I expect I will keep the file check and upload monitoring inside a single handler for now. I am working on commercial deployment, so I have to take a 'wait-and-see' approach with features, despite my personal curiousity about how the dev team is shaping the libs. What would mod_python.conf look like? If one handler is doing everything, is this correct? <Directory myserver/www/uploads> AddHandler mod_python * PythonPath "['/foo/mypy/'] + sys.path" PythonHandler fixup #PythonDebug On </Directory> Greg > Because some handlers such as mod_python.publisher have already > consumed request content by the time your code has been called, > the simplest thing to do is to do the check in a fixup handler which is > run in addition too, but before the normal content handler. > > For example: > > PythonFixupHandler check_for_large_uploads > > # check_for_large_uploads.py > > from mod_python import apache > > UPLOAD_LIMIT = 1000000 > > def fixuphandler(req): > length = int(req.headers_in.get("Content-Length", "0")) > if length >= UPLOAD_LIMIT: > req.content_type = 'text/plain' > req.status = apache.HTTP_BAD_REQUEST > req.write('upload too big\n') > return apache.DONE > > return apache.OK > > The important bit is that the fixup handler must cause call to following > content handler to be aborted. This is why it explicitly sets req.status > and then returns apache.DONE instead of apache.OK. The handler > needs to also construct any custom response. > > Not sure there is a simple way of handling an upload that takes too > long. I haven't looked at the file_callback feature to see whether that > might make it easier. > > Graham
|