summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-10-12 15:12:28 (GMT)
committerGuido van Rossum <guido@python.org>1998-10-12 15:12:28 (GMT)
commit1c5fb1cd1ba069234f21b2da8e31818f4c56531b (patch)
treec258988fec71463ece088f6c45f322d877a12f55 /Lib
parent8571ed86479c03a67a6bae44e8115379c792b41c (diff)
downloadcpython-1c5fb1cd1ba069234f21b2da8e31818f4c56531b.zip
cpython-1c5fb1cd1ba069234f21b2da8e31818f4c56531b.tar.gz
cpython-1c5fb1cd1ba069234f21b2da8e31818f4c56531b.tar.bz2
Make mimetypes.guess_type understand data URLs. (Sjoerd Mullender)
Diffstat (limited to 'Lib')
-rw-r--r--Lib/mimetypes.py21
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])