From 1d10f3eac2248ca0af65eeb6414d3ef841419761 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Sun, 21 May 2000 16:25:29 +0000 Subject: Changed list_directory() somewhat. It is now only called when there is no index.htm[l] file, and when it is called, it also spits out the headers. When an index.htm[l] file is present, the regular (file access) path is followed. Also, when the guessed content-type matches text/*, open the file in text mode; otherwise in binary mode. --- Lib/SimpleHTTPServer.py | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py index 6def14e..7125413 100644 --- a/Lib/SimpleHTTPServer.py +++ b/Lib/SimpleHTTPServer.py @@ -59,24 +59,38 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): """ path = self.translate_path(self.path) + f = None if os.path.isdir(path): - f = self.list_directory(path) - if f is None: - return None - ctype = "text/HTML" + for index in "index.html", "index.htm": + index = os.path.join(path, index) + if os.path.exists(index): + path = index + break + else: + return self.list_directory(path) + ctype = self.guess_type(path) + if ctype.startswith('text/'): + mode = 'r' else: - try: - f = open(path, 'rb') - except IOError: - self.send_error(404, "File not found") - return None - ctype = self.guess_type(path) + mode = 'rb' + try: + f = open(path, mode) + except IOError: + self.send_error(404, "File not found") + return None self.send_response(200) self.send_header("Content-type", ctype) self.end_headers() return f def list_directory(self, path): + """Helper to produce a directory listing (absent index.html). + + Return value is either a file object, or None (indicating an + error). In either case, the headers are sent, making the + interface the same as for send_head(). + + """ try: list = os.listdir(path) except os.error: @@ -88,15 +102,20 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): f.write("
\n\n
\n") f.seek(0) + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() return f def translate_path(self, path): -- cgit v0.12