mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-75223: Deprecate undotted extensions in mimetypes.MimeTypes.add_type
(#128638)
Co-authored-by: Petr Viktorin <encukou@gmail.com> Co-authored-by: Daniel Watkins <daniel@daniel-watkins.co.uk> Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
This commit is contained in:
parent
fe8ad53443
commit
ee9102a535
6 changed files with 51 additions and 1 deletions
|
@ -61,6 +61,14 @@ Pending removal in Python 3.16
|
||||||
* Calling the Python implementation of :func:`functools.reduce` with *function*
|
* Calling the Python implementation of :func:`functools.reduce` with *function*
|
||||||
or *sequence* as keyword arguments has been deprecated since Python 3.14.
|
or *sequence* as keyword arguments has been deprecated since Python 3.14.
|
||||||
|
|
||||||
|
* :mod:`mimetypes`:
|
||||||
|
|
||||||
|
* Valid extensions start with a '.' or are empty for
|
||||||
|
:meth:`mimetypes.MimeTypes.add_type`.
|
||||||
|
Undotted extensions are deprecated and will
|
||||||
|
raise a :exc:`ValueError` in Python 3.16.
|
||||||
|
(Contributed by Hugo van Kemenade in :gh:`75223`.)
|
||||||
|
|
||||||
* :mod:`shutil`:
|
* :mod:`shutil`:
|
||||||
|
|
||||||
* The :class:`!ExecError` exception
|
* The :class:`!ExecError` exception
|
||||||
|
|
|
@ -301,13 +301,18 @@ than one MIME-type database; it provides an interface similar to the one of the
|
||||||
|
|
||||||
.. method:: MimeTypes.add_type(type, ext, strict=True)
|
.. method:: MimeTypes.add_type(type, ext, strict=True)
|
||||||
|
|
||||||
Add a mapping from the MIME type *type* to the extension *ext*. When the
|
Add a mapping from the MIME type *type* to the extension *ext*.
|
||||||
|
Valid extensions start with a '.' or are empty. When the
|
||||||
extension is already known, the new type will replace the old one. When the type
|
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.
|
is already known the extension will be added to the list of known extensions.
|
||||||
|
|
||||||
When *strict* is ``True`` (the default), the mapping will be added to the
|
When *strict* is ``True`` (the default), the mapping will be added to the
|
||||||
official MIME types, otherwise to the non-standard ones.
|
official MIME types, otherwise to the non-standard ones.
|
||||||
|
|
||||||
|
.. deprecated-removed:: 3.14 3.16
|
||||||
|
Invalid, undotted extensions will raise a
|
||||||
|
:exc:`ValueError` in Python 3.16.
|
||||||
|
|
||||||
|
|
||||||
.. _mimetypes-cli:
|
.. _mimetypes-cli:
|
||||||
|
|
||||||
|
|
|
@ -1589,6 +1589,13 @@ Deprecated
|
||||||
and scheduled for removal in Python 3.16. Define handlers with the *stream*
|
and scheduled for removal in Python 3.16. Define handlers with the *stream*
|
||||||
argument instead. (Contributed by Mariusz Felisiak in :gh:`115032`.)
|
argument instead. (Contributed by Mariusz Felisiak in :gh:`115032`.)
|
||||||
|
|
||||||
|
* :mod:`mimetypes`:
|
||||||
|
Valid extensions start with a '.' or are empty for
|
||||||
|
:meth:`mimetypes.MimeTypes.add_type`.
|
||||||
|
Undotted extensions are deprecated and will
|
||||||
|
raise a :exc:`ValueError` in Python 3.16.
|
||||||
|
(Contributed by Hugo van Kemenade in :gh:`75223`.)
|
||||||
|
|
||||||
* :mod:`!nturl2path`: This module is now deprecated. Call
|
* :mod:`!nturl2path`: This module is now deprecated. Call
|
||||||
:func:`urllib.request.url2pathname` and :func:`~urllib.request.pathname2url`
|
:func:`urllib.request.url2pathname` and :func:`~urllib.request.pathname2url`
|
||||||
instead.
|
instead.
|
||||||
|
|
|
@ -89,7 +89,19 @@ class MimeTypes:
|
||||||
If strict is true, information will be added to
|
If strict is true, information will be added to
|
||||||
list of standard types, else to the list of non-standard
|
list of standard types, else to the list of non-standard
|
||||||
types.
|
types.
|
||||||
|
|
||||||
|
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),
|
||||||
|
)
|
||||||
|
|
||||||
if not type:
|
if not type:
|
||||||
return
|
return
|
||||||
self.types_map[strict][ext] = type
|
self.types_map[strict][ext] = type
|
||||||
|
|
|
@ -363,6 +363,22 @@ class MimeTypesTestCase(unittest.TestCase):
|
||||||
self.assertEqual(self.db.guess_extension(
|
self.assertEqual(self.db.guess_extension(
|
||||||
type='image/jpg', strict=False), '.jpg')
|
type='image/jpg', strict=False), '.jpg')
|
||||||
|
|
||||||
|
def test_added_types_are_used(self):
|
||||||
|
mimetypes.add_type('testing/default-type', '')
|
||||||
|
mime_type, _ = mimetypes.guess_type('')
|
||||||
|
self.assertEqual(mime_type, 'testing/default-type')
|
||||||
|
|
||||||
|
mime_type, _ = mimetypes.guess_type('test.myext')
|
||||||
|
self.assertEqual(mime_type, None)
|
||||||
|
|
||||||
|
mimetypes.add_type('testing/type', '.myext')
|
||||||
|
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):
|
||||||
|
mimetypes.add_type("testing/type", "undotted")
|
||||||
|
|
||||||
|
|
||||||
@unittest.skipUnless(sys.platform.startswith("win"), "Windows only")
|
@unittest.skipUnless(sys.platform.startswith("win"), "Windows only")
|
||||||
class Win32MimeTypesTestCase(unittest.TestCase):
|
class Win32MimeTypesTestCase(unittest.TestCase):
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Deprecate undotted extensions in :meth:`mimetypes.MimeTypes.add_type`.
|
||||||
|
Patch by Hugo van Kemenade.
|
Loading…
Add table
Add a link
Reference in a new issue