• Facebook
  • Twitter
  • Reddit
  • StumbleUpon
  • Digg
  • email

import os.path
import StringIO
import pprint
import re
 
import atma.web.resource as resource
import atma.web.fastcgi as fastcgi
import atma.web.http as http
 
class Resource(resource.Resource):
    isLeaf = True
    def render_GET(self, request):
        request.setHeader('Content-Type', 'text/plain; charset=utf-8')
        request.setHeader('Cache-Control', 'no-cache')
        request.setHeader('Pragma', 'no-cache')
        request.setHeader('Expires', '0')
 
        res = []
 
        if isinstance(request.protocol, fastcgi.Protocol):
            backend = 'FastCGI'
        elif isinstance(request.protocol, http.Protocol):
            backend = 'HTTP'
        else:
            backend = 'unknown'
 
        res.append(('backend', backend))
        res.append(('request class', request.__class__))
        res.append(('request.method', request.method))
        res.append(('request.uri', request.uri))
        res.append(('request.path', request.path))
        res.append(('request.args', request.args))
        res.append(('request.getHeader("content-type")', request.getHeader("content-type")))
        res.append(('request.content.read(100)', request.content.read(100)))
 
        m = StringIO.StringIO()
 
        if request.multipart:
            print >>m, 'multipart/form-data'
            for headers, content in request.multipart:
                contentDisposition = headers['content-disposition']
 
                assert contentDisposition[0] == 'form-data'
 
                name = contentDisposition[1]['name']
                filename = contentDisposition[1].get('filename', None)
 
                if isinstance(content, str):
                    print >>m, '  %s -> (%s) %r [...]' % (name, filename, content[:30])
                elif isinstance(content, file):
                    assert re.match('^[_a-zA-Z][\w]*$', name)
 
                    outname = os.path.abspath('upload--%s' % name)
 
                    print >>m, '  %s -> (%s, large file) %r' % (name, filename, outname)
 
                    outfile = file(outname, 'w+b')
                    while 1:
                        tmp = content.read(0x8000)
                        if not tmp:
                            break
                        outfile.write(tmp)
                    outfile.close()
                else:
                    print >>m, '  %s -> unknown' % (name,)
 
        request.write('\n'.join(['---> ' + i[0] + ': ' + pprint.pformat(i[1]) for i in res]) + '\n')
        request.write(m.getvalue())
 
        return '\n'