summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDong-hee Na <donghee.na92@gmail.com>2019-09-05 00:34:35 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-09-05 00:34:35 (GMT)
commit87bd2071c756188b6cd577889fb1682831142ceb (patch)
treef611951d4ebbb460748aeb26b8e7af4b67c9ed5f
parent6cd9666ce93658ae91f07b396aa6932b362a61d3 (diff)
downloadcpython-87bd2071c756188b6cd577889fb1682831142ceb.zip
cpython-87bd2071c756188b6cd577889fb1682831142ceb.tar.gz
cpython-87bd2071c756188b6cd577889fb1682831142ceb.tar.bz2
bpo-22347: Update mimetypes.guess_type to allow proper parsing of URLs (GH-15522)
https://bugs.python.org/issue22347
-rw-r--r--Lib/mimetypes.py3
-rw-r--r--Lib/test/test_mimetypes.py8
-rw-r--r--Lib/test/test_urllib2.py2
-rw-r--r--Misc/NEWS.d/next/Library/2019-08-27-01-03-26.bpo-22347._TRpYr.rst2
4 files changed, 13 insertions, 2 deletions
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index 01a16fd..f38005c 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -114,7 +114,8 @@ class MimeTypes:
but non-standard types.
"""
url = os.fspath(url)
- scheme, url = urllib.parse._splittype(url)
+ p = urllib.parse.urlparse(url)
+ scheme, url = p.scheme, p.path
if scheme == 'data':
# syntax of data URLs:
# dataurl := "data:" [ mediatype ] [ ";base64" ] "," data
diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py
index bfd5eee..7761c3f 100644
--- a/Lib/test/test_mimetypes.py
+++ b/Lib/test/test_mimetypes.py
@@ -51,6 +51,14 @@ class MimeTypesTestCase(unittest.TestCase):
eq(self.db.guess_type('foo.xul', strict=False), ('text/xul', None))
eq(self.db.guess_extension('image/jpg', strict=False), '.jpg')
+ def test_url(self):
+ result = self.db.guess_type('http://host.html')
+ msg = 'URL only has a host name, not a file'
+ self.assertSequenceEqual(result, (None, None), msg)
+ result = self.db.guess_type('http://example.com/host.html')
+ msg = 'Should be text/html'
+ self.assertSequenceEqual(result, ('text/html', None), msg)
+
def test_guess_all_types(self):
eq = self.assertEqual
unless = self.assertTrue
diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py
index 7b576db..c228fa7 100644
--- a/Lib/test/test_urllib2.py
+++ b/Lib/test/test_urllib2.py
@@ -742,7 +742,7 @@ class HandlerTests(unittest.TestCase):
["foo", "bar"], "", None),
("ftp://localhost/baz.gif;type=a",
"localhost", ftplib.FTP_PORT, "", "", "A",
- [], "baz.gif", None), # XXX really this should guess image/gif
+ [], "baz.gif", "image/gif"),
]:
req = Request(url)
req.timeout = None
diff --git a/Misc/NEWS.d/next/Library/2019-08-27-01-03-26.bpo-22347._TRpYr.rst b/Misc/NEWS.d/next/Library/2019-08-27-01-03-26.bpo-22347._TRpYr.rst
new file mode 100644
index 0000000..1a3c199
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-08-27-01-03-26.bpo-22347._TRpYr.rst
@@ -0,0 +1,2 @@
+Update mimetypes.guess_type to allow proper parsing of URLs with only a host name.
+Patch by Dong-hee Na.