Commit 2a5cb8db by willmcgugan@gmail.com

wsgi example fixed

parent 3a3f4991
...@@ -15,6 +15,7 @@ table.dirlist { ...@@ -15,6 +15,7 @@ table.dirlist {
margin:0 auto; margin:0 auto;
font-size:13px; font-size:13px;
color:#666; color:#666;
min-width:960px;
} }
table.dirlist tr.r1 { table.dirlist tr.r1 {
...@@ -58,19 +59,21 @@ table.dirlist tr:hover { ...@@ -58,19 +59,21 @@ table.dirlist tr:hover {
<table class="dirlist"> <table class="dirlist">
<thead>
<tr>
<th>File/Directory</th>
<th>Size</th>
<th>Created Date</th>
</tr>
</thead>
<tbody> <tbody>
% for i, entry in enumerate(dirlist): % for i, entry in enumerate(dirlist):
<tr class="${entry['type']} r${i%2}"> <tr class="${entry['type']} r${i%2}">
<td><a class="link-${entry['type']}" href="${ entry['path'] }">${entry['name']}</a></td> <td><a class="link-${entry['type']}" href="${ entry['path'] }">${entry['name']}</a></td>
<td>${entry['size']}</td> <td>${entry['size']}</td>
<td>${entry['created_time']}</td> <td>${entry['created_time']}</td>
</tr> </tr>
% endfor % endfor
</tbody> </tbody>
</table> </table>
......
from wsgiref.simple_server import make_server
from fs.osfs import OSFS from fs.osfs import OSFS
from wsgi import serve_fs from wsgi import serve_fs
osfs = OSFS('~/') osfs = OSFS('~/')
application = serve_fs(osfs) application = serve_fs(osfs)
httpd = make_server('', 8000, application)
print "Serving on http://127.0.0.1:8000"
httpd.serve_forever()
...@@ -62,22 +62,24 @@ class WSGIServer(object): ...@@ -62,22 +62,24 @@ class WSGIServer(object):
serving_file.close() serving_file.close()
return self.serve_500(request, str(e)) return self.serve_500(request, str(e))
mime_type = mimetypes.guess_type(basename(path)) mime_type = mimetypes.guess_type(basename(path))[0] or b'text/plain'
file_size = self.serve_fs.getsize(path) file_size = self.serve_fs.getsize(path)
headers = [('Content-Type', mime_type), headers = [(b'Content-Type', bytes(mime_type)),
('Content-Length', str(file_size))] (b'Content-Length', bytes(file_size))]
def gen_file(): def gen_file():
chunk_size = self.chunk_size
read = serving_file.read
try: try:
while True: while 1:
data = serving_file.read(self.chunk_size) data = read(chunk_size)
if not data: if not data:
break break
yield data yield data
finally: finally:
serving_file.close() serving_file.close()
request.start_response('200 OK', request.start_response(b'200 OK',
headers) headers)
return gen_file() return gen_file()
...@@ -121,22 +123,21 @@ class WSGIServer(object): ...@@ -121,22 +123,21 @@ class WSGIServer(object):
# Render the mako template # Render the mako template
html = self.dir_template.render(**dict(fs=self.serve_fs, html = self.dir_template.render(**dict(fs=self.serve_fs,
path=path, path=path,
dirlist=entries)) dirlist=entries)).encode('utf-8')
request.start_response(b'200 OK', [(b'Content-Type', b'text/html'),
request.start_response('200 OK', [('Content-Type', 'text/html'), (b'Content-Length', b'%i' % len(html))])
('Content-Length', '%i' % len(html))])
return [html] return [html]
def serve_404(self, request, msg='Not found'): def serve_404(self, request, msg='Not found'):
"""Serves a Not found page""" """Serves a Not found page"""
request.start_response('404 NOT FOUND', [('Content-Type', 'text/html')]) request.start_response(b'404 NOT FOUND', [(b'Content-Type', b'text/html')])
return [msg] return [msg]
def serve_500(self, request, msg='Unable to complete request'): def serve_500(self, request, msg='Unable to complete request'):
"""Serves an internal server error page""" """Serves an internal server error page"""
request.start_response('500 INTERNAL SERVER ERROR', [('Content-Type', 'text/html')]) request.start_response(b'500 INTERNAL SERVER ERROR', [(b'Content-Type', b'text/html')])
return [msg] return [msg]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment