diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-08-27 20:16:53 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2001-08-27 20:16:53 (GMT) |
commit | 6d8c1aabff765d4958132f750a968769e7cece13 (patch) | |
tree | 617d67c72baf597fea0176a99972bc309a7e195c /Lib | |
parent | 53da3178011d5eaf143d6d9d76274a7530204179 (diff) | |
download | cpython-6d8c1aabff765d4958132f750a968769e7cece13.zip cpython-6d8c1aabff765d4958132f750a968769e7cece13.tar.gz cpython-6d8c1aabff765d4958132f750a968769e7cece13.tar.bz2 |
Add content-type header to ftp URLs (SF patch #454553)
Modify rfc822.formatdate() to always generate English names,
regardless of locale. This is required by RFC 1123.
In open_local_file() of urllib and urllib2, use new formatdate() from
rfc822.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/rfc822.py | 14 | ||||
-rw-r--r-- | Lib/urllib.py | 10 | ||||
-rw-r--r-- | Lib/urllib2.py | 17 |
3 files changed, 27 insertions, 14 deletions
diff --git a/Lib/rfc822.py b/Lib/rfc822.py index c2249f3..e69c4cb 100644 --- a/Lib/rfc822.py +++ b/Lib/rfc822.py @@ -953,11 +953,21 @@ def formatdate(timeval=None): """Returns time format preferred for Internet standards. Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 + + According to RFC 1123, day and month names must always be in + English. If not for that, this code could use strftime(). It + can't because strftime() honors the locale and could generated + non-English names. """ if timeval is None: timeval = time.time() - return "%s" % time.strftime('%a, %d %b %Y %H:%M:%S GMT', - time.gmtime(timeval)) + timeval = time.gmtime(timeval) + return "%s, %02d %s %04d %02d:%02d:%02d GMT" % ( + ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][timeval[6]], + timeval[2], + ["Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][timeval[1]-1], + timeval[0], timeval[3], timeval[4], timeval[5]) # When used as script, run a small test program. diff --git a/Lib/urllib.py b/Lib/urllib.py index a255956..8c1852e 100644 --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -406,18 +406,12 @@ class URLopener: def open_local_file(self, url): """Use local file.""" - import mimetypes, mimetools, StringIO + import mimetypes, mimetools, rfc822, StringIO host, file = splithost(url) localname = url2pathname(file) stats = os.stat(localname) size = stats[stat.ST_SIZE] - modified = time.gmtime(stats[stat.ST_MTIME]) - modified = "%s, %02d %s %04d %02d:%02d:%02d GMT" % ( - ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"][modified[6]], - modified[2], - ["Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][modified[1]-1], - modified[0], modified[3], modified[4], modified[5]) + modified = rfc822.formatdate(stats[stat.ST_MTIME]) mtype = mimetypes.guess_type(url)[0] headers = mimetools.Message(StringIO.StringIO( 'Content-Type: %s\nContent-Length: %d\nLast-modified: %s\n' % diff --git a/Lib/urllib2.py b/Lib/urllib2.py index 5882de6..beb9fa5 100644 --- a/Lib/urllib2.py +++ b/Lib/urllib2.py @@ -96,9 +96,12 @@ import urlparse import md5 import mimetypes import mimetools +import rfc822 import ftplib import sys import time +import os +import stat import gopherlib import posixpath @@ -914,16 +917,22 @@ class FileHandler(BaseHandler): # not entirely sure what the rules are here def open_local_file(self, req): - mtype = mimetypes.guess_type(req.get_selector())[0] - headers = mimetools.Message(StringIO('Content-Type: %s\n' \ - % (mtype or 'text/plain'))) host = req.get_host() file = req.get_selector() + localfile = url2pathname(file) + stats = os.stat(localfile) + size = stats[stat.ST_SIZE] + modified = rfc822.formatdate(stats[stat.ST_MTIME]) + mtype = mimetypes.guess_type(file)[0] + stats = os.stat(localfile) + headers = mimetools.Message(StringIO( + 'Content-Type: %s\nContent-Length: %d\nLast-modified: %s\n' % + (mtype or 'text/plain', size, modified))) if host: host, port = splitport(host) if not host or \ (not port and socket.gethostbyname(host) in self.get_names()): - return addinfourl(open(url2pathname(file), 'rb'), + return addinfourl(open(localfile, 'rb'), headers, 'file:'+file) raise URLError('file not on local host') |