Patch #1417555: SimpleHTTPServer now returns Last-Modified headers.

This commit is contained in:
Georg Brandl 2006-02-17 13:34:16 +00:00
parent bcd548bdb2
commit 5d076961e2
4 changed files with 21 additions and 8 deletions

View file

@ -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. of the \member{server_version} and \member{sys_version} class variables.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}{date_time_string}{} \begin{methoddesc}{date_time_string}{\optional{timestamp}}
Returns the current date and time, formatted for a message header. 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} \end{methoddesc}
\begin{methoddesc}{log_data_time_string}{} \begin{methoddesc}{log_date_time_string}{}
Returns the current date and time, formatted for logging. Returns the current date and time, formatted for logging.
\end{methoddesc} \end{methoddesc}

View file

@ -65,13 +65,18 @@ error. Otherwise, the content type is guessed by calling the
\var{extensions_map} variable. \var{extensions_map} variable.
A \code{'Content-type:'} header with the guessed content type is 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 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 starts with \code{text/} the file is opened in text mode; otherwise
binary mode is used. binary mode is used.
For example usage, see the implementation of the \function{test()} For example usage, see the implementation of the \function{test()}
function. function.
\versionadded[The \code{'Last-Modified'} header]{2.5}
\end{methoddesc} \end{methoddesc}

View file

@ -436,10 +436,11 @@ class BaseHTTPRequestHandler(SocketServer.StreamRequestHandler):
"""Return the server software version string.""" """Return the server software version string."""
return self.server_version + ' ' + self.sys_version 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.""" """Return the current date and time formatted for a message header."""
now = time.time() if timestamp is None:
year, month, day, hh, mm, ss, wd, y, z = time.gmtime(now) timestamp = time.time()
year, month, day, hh, mm, ss, wd, y, z = time.gmtime(timestamp)
s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % (
self.weekdayname[wd], self.weekdayname[wd],
day, self.monthname[month], year, day, self.monthname[month], year,

View file

@ -85,7 +85,9 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
return None return None
self.send_response(200) self.send_response(200)
self.send_header("Content-type", ctype) 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() self.end_headers()
return f return f