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'