]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-149720: Remove support for undotted `ext` in `mimetypes.MimeType.add_type` (#149721)
authorsobolevn <mail@sobolevn.me>
Tue, 12 May 2026 13:40:21 +0000 (16:40 +0300)
committerGitHub <noreply@github.com>
Tue, 12 May 2026 13:40:21 +0000 (13:40 +0000)
Doc/library/mimetypes.rst
Doc/whatsnew/3.16.rst
Lib/mimetypes.py
Lib/test/test_mimetypes.py
Misc/NEWS.d/next/Library/2026-05-12-14-44-39.gh-issue-149720.ccsoW-.rst [new file with mode: 0644]

index 0facacd50fd389e8244310df4ff62c429193a6cb..eed9acb92e0c95f933823d1d3179be97e6fd0aee 100644 (file)
@@ -129,10 +129,18 @@ behavior of the module.
    Add a mapping from the MIME type *type* to the extension *ext*. When the
    extension is already known, the new type will replace the old one. When the type
    is already known the extension will be added to the list of known extensions.
+   Valid extensions are empty or start with a ``'.'``.
 
    When *strict* is ``True`` (the default), the mapping will be added to the
    official MIME types, otherwise to the non-standard ones.
 
+   .. deprecated:: 3.14
+      *ext* values that do not start with ``'.'`` are deprecated.
+
+   .. versionchanged:: next
+      *ext* now must start with ``'.'``. Otherwise :exc:`ValueError` is raised.
+
+
 
 .. data:: inited
 
index 6d91d53f478d8eb71cddb7cd5c21a39cf207b725..f79f976ee55cfa1e36ea06bb66ba0084dc08d6ba 100644 (file)
@@ -127,6 +127,13 @@ logging
   and scheduled for removal in Python 3.16. Define handlers with the *stream*
   argument instead.
 
+mimetypes
+---------
+
+* Valid extensions start with a '.' or are empty for
+  :meth:`mimetypes.MimeTypes.add_type`.
+  Undotted extensions now raise a :exc:`ValueError`.
+
 symtable
 --------
 
index 6d9278bccf927edc34122dcd94fb47498a99184b..15e8c0a437bfd93f3d6d4a83b6f74f3a0b8266db 100644 (file)
@@ -93,14 +93,7 @@ class MimeTypes:
         Valid extensions are empty or start with a '.'.
         """
         if ext and not ext.startswith('.'):
-            from warnings import _deprecated
-
-            _deprecated(
-                "Undotted extensions",
-                "Using undotted extensions is deprecated and "
-                "will raise a ValueError in Python {remove}",
-                remove=(3, 16),
-            )
+            raise ValueError(f"Extension {ext!r} must start with '.'")
 
         if not type:
             return
index 2d618081521e10d41dcbaf67fd6a510ec9826c5c..607aff8418edcfeb5fb283f6ca36b21dced06191 100644 (file)
@@ -389,9 +389,12 @@ class MimeTypesTestCase(unittest.TestCase):
         mime_type, _ = mimetypes.guess_type('test.myext')
         self.assertEqual(mime_type, 'testing/type')
 
-    def test_add_type_with_undotted_extension_deprecated(self):
-        with self.assertWarns(DeprecationWarning):
+    def test_add_type_with_undotted_extension_not_supported(self):
+        msg = "Extension 'undotted' must start with '.'"
+        with self.assertRaisesRegex(ValueError, msg):
             mimetypes.add_type("testing/type", "undotted")
+        with self.assertRaisesRegex(ValueError, msg):
+            mimetypes.add_type("", "undotted")
 
 
 @unittest.skipUnless(sys.platform.startswith("win"), "Windows only")
diff --git a/Misc/NEWS.d/next/Library/2026-05-12-14-44-39.gh-issue-149720.ccsoW-.rst b/Misc/NEWS.d/next/Library/2026-05-12-14-44-39.gh-issue-149720.ccsoW-.rst
new file mode 100644 (file)
index 0000000..f16d877
--- /dev/null
@@ -0,0 +1 @@
+Remove support for undotted *ext* in :meth:`mimetypes.MimeTypes.add_type`.