diff options
author | Guido van Rossum <guido@python.org> | 1998-10-12 15:12:28 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-10-12 15:12:28 (GMT) |
commit | 1c5fb1cd1ba069234f21b2da8e31818f4c56531b (patch) | |
tree | c258988fec71463ece088f6c45f322d877a12f55 | |
parent | 8571ed86479c03a67a6bae44e8115379c792b41c (diff) | |
download | cpython-1c5fb1cd1ba069234f21b2da8e31818f4c56531b.zip cpython-1c5fb1cd1ba069234f21b2da8e31818f4c56531b.tar.gz cpython-1c5fb1cd1ba069234f21b2da8e31818f4c56531b.tar.bz2 |
Make mimetypes.guess_type understand data URLs. (Sjoerd Mullender)
-rw-r--r-- | Lib/mimetypes.py | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index b35d0ff..3d6510e 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -25,6 +25,7 @@ read_mime_types(file) -- parse one file, return a dictionary or None import string import posixpath +import urllib knownfiles = [ "/usr/local/etc/httpd/conf/mime.types", @@ -53,6 +54,26 @@ def guess_type(url): """ if not inited: init() + scheme, url = urllib.splittype(url) + if scheme == 'data': + # syntax of data URLs: + # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data + # mediatype := [ type "/" subtype ] *( ";" parameter ) + # data := *urlchar + # parameter := attribute "=" value + # type/subtype defaults to "text/plain" + comma = string.find(url, ',') + if comma < 0: + # bad data URL + return None, None + semi = string.find(url, ';', 0, comma) + if semi >= 0: + type = url[:semi] + else: + type = url[:comma] + if '=' in type or '/' not in type: + type = 'text/plain' + return type, None # never compressed, so encoding is None base, ext = posixpath.splitext(url) while suffix_map.has_key(ext): base, ext = posixpath.splitext(base + suffix_map[ext]) |