summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2006-02-17 13:34:16 (GMT)
committerGeorg Brandl <georg@python.org>2006-02-17 13:34:16 (GMT)
commit5d076961e285a74d3d5aeae88a52517c38c44846 (patch)
treed950098a3f739e74179fb91c21274749753bb5fd
parentbcd548bdb2f40bd739c6ff40f5903c74c190bc23 (diff)
downloadcpython-5d076961e285a74d3d5aeae88a52517c38c44846.zip
cpython-5d076961e285a74d3d5aeae88a52517c38c44846.tar.gz
cpython-5d076961e285a74d3d5aeae88a52517c38c44846.tar.bz2
Patch #1417555: SimpleHTTPServer now returns Last-Modified headers.
-rw-r--r--Doc/lib/libbasehttp.tex11
-rw-r--r--Doc/lib/libsimplehttp.tex7
-rw-r--r--Lib/BaseHTTPServer.py7
-rw-r--r--Lib/SimpleHTTPServer.py4
4 files changed, 21 insertions, 8 deletions
diff --git a/Doc/lib/libbasehttp.tex b/Doc/lib/libbasehttp.tex
index fe794f8..64c069f 100644
--- a/Doc/lib/libbasehttp.tex
+++ b/Doc/lib/libbasehttp.tex
@@ -217,11 +217,16 @@ Returns the server software's version string. This is a combination
of the \member{server_version} and \member{sys_version} class variables.
\end{methoddesc}
-\begin{methoddesc}{date_time_string}{}
-Returns the current date and time, formatted for a message header.
+\begin{methoddesc}{date_time_string}{\optional{timestamp}}
+Returns the date and time given by \var{timestamp} (which must be in the
+format returned by \function{time.time()}), formatted for a message header.
+If \var{timestamp} is omitted, it uses the current date and time.
+
+The result looks like \code{'Sun, 06 Nov 1994 08:49:37 GMT'}.
+\versionadded[The \var{timestamp} parameter]{2.5}
\end{methoddesc}
-\begin{methoddesc}{log_data_time_string}{}
+\begin{methoddesc}{log_date_time_string}{}
Returns the current date and time, formatted for logging.
\end{methoddesc}
diff --git a/Doc/lib/libsimplehttp.tex b/Doc/lib/libsimplehttp.tex
index c30eaa8..efb40ec 100644
--- a/Doc/lib/libsimplehttp.tex
+++ b/Doc/lib/libsimplehttp.tex
@@ -65,13 +65,18 @@ error. Otherwise, the content type is guessed by calling the
\var{extensions_map} variable.
A \code{'Content-type:'} header with the guessed content type is
-output, followed by a blank line signifying the end of the headers,
+output, followed by a \code{'Content-Length:'} header with the file's
+size and a \code{'Last-Modified:'} header with the file's modification
+time.
+
+Then follows a blank line signifying the end of the headers,
and then the contents of the file are output. If the file's MIME type
starts with \code{text/} the file is opened in text mode; otherwise
binary mode is used.
For example usage, see the implementation of the \function{test()}
function.
+\versionadded[The \code{'Last-Modified'} header]{2.5}
\end{methoddesc}
diff --git a/Lib/BaseHTTPServer.py b/Lib/BaseHTTPServer.py
index 722b50c..1b3d4db 100644
--- a/Lib/BaseHTTPServer.py
+++ b/Lib/BaseHTTPServer.py
@@ -436,10 +436,11 @@ class BaseHTTPRequestHandler(SocketServer.StreamRequestHandler):
"""Return the server software version string."""
return self.server_version + ' ' + self.sys_version
- def date_time_string(self):
+ def date_time_string(self, timestamp=None):
"""Return the current date and time formatted for a message header."""
- now = time.time()
- year, month, day, hh, mm, ss, wd, y, z = time.gmtime(now)
+ if timestamp is None:
+ timestamp = time.time()
+ year, month, day, hh, mm, ss, wd, y, z = time.gmtime(timestamp)
s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % (
self.weekdayname[wd],
day, self.monthname[month], year,
diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py
index ea10fb7..089936f 100644
--- a/Lib/SimpleHTTPServer.py
+++ b/Lib/SimpleHTTPServer.py
@@ -85,7 +85,9 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
return None
self.send_response(200)
self.send_header("Content-type", ctype)
- self.send_header("Content-Length", str(os.fstat(f.fileno())[6]))
+ fs = os.fstat(f.fileno())
+ self.send_header("Content-Length", str(fs[6]))
+ self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
self.end_headers()
return f