From 57af072e5c0dcacf5c7fe3789113c21d223e1258 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 9 May 2000 14:57:09 +0000 Subject: Add a simple directory listing function. --- Lib/SimpleHTTPServer.py | 47 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py index a4517dc..6def14e 100644 --- a/Lib/SimpleHTTPServer.py +++ b/Lib/SimpleHTTPServer.py @@ -6,7 +6,7 @@ and HEAD requests in a fairly straightforward manner. """ -__version__ = "0.3" +__version__ = "0.4" import os @@ -14,6 +14,8 @@ import string import posixpath import BaseHTTPServer import urllib +import cgi +from StringIO import StringIO class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): @@ -58,18 +60,45 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): """ path = self.translate_path(self.path) if os.path.isdir(path): - self.send_error(403, "Directory listing not supported") - return None - try: - f = open(path, 'rb') - except IOError: - self.send_error(404, "File not found") - return None + f = self.list_directory(path) + if f is None: + return None + ctype = "text/HTML" + else: + try: + f = open(path, 'rb') + except IOError: + self.send_error(404, "File not found") + return None + ctype = self.guess_type(path) self.send_response(200) - self.send_header("Content-type", self.guess_type(path)) + self.send_header("Content-type", ctype) self.end_headers() return f + def list_directory(self, path): + try: + list = os.listdir(path) + except os.error: + self.send_error(404, "No permission to list directory"); + return None + list.sort(lambda a, b: cmp(a.lower(), b.lower())) + f = StringIO() + f.write("

Directory listing for %s

\n" % self.path) + f.write("
\n\n
\n") + f.seek(0) + return f + def translate_path(self, path): """Translate a /-separated PATH to the local filename syntax. -- cgit v0.12