summaryrefslogtreecommitdiffstats
path: root/Lib/urllib.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2001-08-09 17:43:35 (GMT)
committerGuido van Rossum <guido@python.org>2001-08-09 17:43:35 (GMT)
commitf0713d3f4d1d9fbd3cc10877822e824103f7affa (patch)
treefba4b6386211e9ecd2c8a6a0de07f34a1446dee1 /Lib/urllib.py
parentc8718c13e86aff14fbb65d32ab91908c445c98c6 (diff)
downloadcpython-f0713d3f4d1d9fbd3cc10877822e824103f7affa.zip
cpython-f0713d3f4d1d9fbd3cc10877822e824103f7affa.tar.gz
cpython-f0713d3f4d1d9fbd3cc10877822e824103f7affa.tar.bz2
SF Patch #420725 by Walter Doerwald:
For local files urllib.py doesn't return the MIME headers that the documentation says it does: http://www.python.org/doc/current/lib/module- urllib.html#l2h-2187 states that "When the method is local-file, returned headers will include a Date representing the file's last-modified time, a Content- Length giving file size, and a Content-Type containing a guess at the file's type" But in Python 2.1 the only header that gets returned is the Content-Type: >>> import urllib >>> f = urllib.urlopen("gurk.txt") >>> f.info().headers ['Content-Type: text/plain\n']
Diffstat (limited to 'Lib/urllib.py')
-rw-r--r--Lib/urllib.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 084d32a..9c1f5b7 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -25,6 +25,8 @@ used to query various info about the object, if available.
import string
import socket
import os
+import stat
+import time
import sys
import types
@@ -402,15 +404,26 @@ class URLopener:
def open_local_file(self, url):
"""Use local file."""
import mimetypes, mimetools, 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])
mtype = mimetypes.guess_type(url)[0]
headers = mimetools.Message(StringIO.StringIO(
- 'Content-Type: %s\n' % (mtype or 'text/plain')))
- host, file = splithost(url)
+ 'Content-Type: %s\nContent-Length: %d\nLast-modified: %s\n' %
+ (mtype or 'text/plain', size, modified)))
if not host:
urlfile = file
if file[:1] == '/':
urlfile = 'file://' + file
- return addinfourl(open(url2pathname(file), 'rb'),
+ return addinfourl(open(localname, 'rb'),
headers, urlfile)
host, port = splitport(host)
if not port \
@@ -418,7 +431,7 @@ class URLopener:
urlfile = file
if file[:1] == '/':
urlfile = 'file://' + file
- return addinfourl(open(url2pathname(file), 'rb'),
+ return addinfourl(open(localname, 'rb'),
headers, urlfile)
raise IOError, ('local file error', 'not on local host')