]> granicus.if.org Git - python/commitdiff
bpo-22347: Update mimetypes.guess_type to allow proper parsing of URLs (GH-15522)
authorDong-hee Na <donghee.na92@gmail.com>
Thu, 5 Sep 2019 00:34:35 +0000 (09:34 +0900)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 5 Sep 2019 00:34:35 +0000 (17:34 -0700)
https://bugs.python.org/issue22347

Lib/mimetypes.py
Lib/test/test_mimetypes.py
Lib/test/test_urllib2.py
Misc/NEWS.d/next/Library/2019-08-27-01-03-26.bpo-22347._TRpYr.rst [new file with mode: 0644]

index 01a16fdf9aa1b35472a4e0eede54765efec0e5d7..f38005c9d295986f05144a6958c3cacb2f411226 100644 (file)
@@ -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
index bfd5eeedaa77b47ea5f12772f9f42a9314df1690..7761c3fe867a7ea78f97f3e476c19f1517678032 100644 (file)
@@ -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
index 7b576db4e3aaf4cf6f92ade92336d1846fc02c2c..c228fa7d1dc12d9cff2ab2ce4912c755fed79ebe 100644 (file)
@@ -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 (file)
index 0000000..1a3c199
--- /dev/null
@@ -0,0 +1,2 @@
+Update mimetypes.guess_type to allow proper parsing of URLs with only a host name.
+Patch by Dong-hee Na.