https://github.com/python/cpython/commit/3c6d2d123004d8e37a2111083e22e2a2c96dffd0
commit: 3c6d2d123004d8e37a2111083e22e2a2c96dffd0
branch: main
author: Hugo van Kemenade <1324225+hug...@users.noreply.github.com>
committer: hugovk <1324225+hug...@users.noreply.github.com>
date: 2024-11-11T21:08:54Z
summary:

gh-89416: Add RFC 9559 MIME types for Matroska formats (#126412)

Co-authored-by: Zachary Ware <zachary.w...@gmail.com>
Co-authored-by: Jelle Zijlstra <jelle.zijls...@gmail.com>

files:
A Misc/NEWS.d/next/Library/2024-11-04-22-53-09.gh-issue-89416.YVQaas.rst
M Doc/whatsnew/3.14.rst
M Lib/mimetypes.py
M Lib/test/test_mimetypes.py

diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst
index c8f7dd162f1137..f9b219828d3d94 100644
--- a/Doc/whatsnew/3.14.rst
+++ b/Doc/whatsnew/3.14.rst
@@ -363,6 +363,19 @@ json
   (Contributed by Trey Hunner in :gh:`122873`.)
 
 
+mimetypes
+---------
+
+* Add :rfc:`9559` MIME types for Matroska audiovisual data container
+  structures, containing:
+
+  * audio with no video: ``audio/matroska`` (``.mka``)
+  * video: ``video/matroska`` (``.mkv``)
+  * stereoscopic video: ``video/matroska-3d`` (``.mk3d``)
+
+  (Contributed by Hugo van Kemenade in :gh:`89416`.)
+
+
 multiprocessing
 ---------------
 
@@ -382,6 +395,7 @@ multiprocessing
 
   (Contributed by Roy Hyunjin Han for :gh:`103134`)
 
+
 operator
 --------
 
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index d7c4e8444f8dec..fd343a78c98ae1 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -534,6 +534,7 @@ def _default_mime_types():
         '.ass'    : 'audio/aac',
         '.au'     : 'audio/basic',
         '.snd'    : 'audio/basic',
+        '.mka'    : 'audio/matroska',
         '.mp3'    : 'audio/mpeg',
         '.mp2'    : 'audio/mpeg',
         '.opus'   : 'audio/opus',
@@ -595,6 +596,8 @@ def _default_mime_types():
         '.sgml'   : 'text/x-sgml',
         '.vcf'    : 'text/x-vcard',
         '.xml'    : 'text/xml',
+        '.mkv'    : 'video/matroska',
+        '.mk3d'   : 'video/matroska-3d',
         '.mp4'    : 'video/mp4',
         '.mpeg'   : 'video/mpeg',
         '.m1v'    : 'video/mpeg',
diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py
index 58f6a4dfae08ba..8d3e8fcafb6740 100644
--- a/Lib/test/test_mimetypes.py
+++ b/Lib/test/test_mimetypes.py
@@ -223,26 +223,33 @@ def test_guess_known_extensions(self):
 
     def test_preferred_extension(self):
         def check_extensions():
-            
self.assertEqual(mimetypes.guess_extension('application/octet-stream'), '.bin')
-            
self.assertEqual(mimetypes.guess_extension('application/postscript'), '.ps')
-            
self.assertEqual(mimetypes.guess_extension('application/vnd.apple.mpegurl'), 
'.m3u')
-            
self.assertEqual(mimetypes.guess_extension('application/vnd.ms-excel'), '.xls')
-            
self.assertEqual(mimetypes.guess_extension('application/vnd.ms-powerpoint'), 
'.ppt')
-            
self.assertEqual(mimetypes.guess_extension('application/x-texinfo'), '.texi')
-            self.assertEqual(mimetypes.guess_extension('application/x-troff'), 
'.roff')
-            self.assertEqual(mimetypes.guess_extension('application/xml'), 
'.xsl')
-            self.assertEqual(mimetypes.guess_extension('audio/mpeg'), '.mp3')
-            self.assertEqual(mimetypes.guess_extension('image/avif'), '.avif')
-            self.assertEqual(mimetypes.guess_extension('image/webp'), '.webp')
-            self.assertEqual(mimetypes.guess_extension('image/jpeg'), '.jpg')
-            self.assertEqual(mimetypes.guess_extension('image/tiff'), '.tiff')
-            self.assertEqual(mimetypes.guess_extension('message/rfc822'), 
'.eml')
-            self.assertEqual(mimetypes.guess_extension('text/html'), '.html')
-            self.assertEqual(mimetypes.guess_extension('text/plain'), '.txt')
-            self.assertEqual(mimetypes.guess_extension('text/rtf'), '.rtf')
-            self.assertEqual(mimetypes.guess_extension('text/x-rst'), '.rst')
-            self.assertEqual(mimetypes.guess_extension('video/mpeg'), '.mpeg')
-            self.assertEqual(mimetypes.guess_extension('video/quicktime'), 
'.mov')
+            for mime_type, ext in (
+                ("application/octet-stream", ".bin"),
+                ("application/postscript", ".ps"),
+                ("application/vnd.apple.mpegurl", ".m3u"),
+                ("application/vnd.ms-excel", ".xls"),
+                ("application/vnd.ms-powerpoint", ".ppt"),
+                ("application/x-texinfo", ".texi"),
+                ("application/x-troff", ".roff"),
+                ("application/xml", ".xsl"),
+                ("audio/matroska", ".mka"),
+                ("audio/mpeg", ".mp3"),
+                ("image/avif", ".avif"),
+                ("image/webp", ".webp"),
+                ("image/jpeg", ".jpg"),
+                ("image/tiff", ".tiff"),
+                ("message/rfc822", ".eml"),
+                ("text/html", ".html"),
+                ("text/plain", ".txt"),
+                ("text/rtf", ".rtf"),
+                ("text/x-rst", ".rst"),
+                ("video/matroska", ".mkv"),
+                ("video/matroska-3d", ".mk3d"),
+                ("video/mpeg", ".mpeg"),
+                ("video/quicktime", ".mov"),
+            ):
+                with self.subTest(mime_type=mime_type, ext=ext):
+                    self.assertEqual(mimetypes.guess_extension(mime_type), ext)
 
         check_extensions()
         mimetypes.init()
diff --git 
a/Misc/NEWS.d/next/Library/2024-11-04-22-53-09.gh-issue-89416.YVQaas.rst 
b/Misc/NEWS.d/next/Library/2024-11-04-22-53-09.gh-issue-89416.YVQaas.rst
new file mode 100644
index 00000000000000..f1a2fcbaff2564
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-11-04-22-53-09.gh-issue-89416.YVQaas.rst
@@ -0,0 +1,2 @@
+Add :rfc:`9559` MIME types for Matroska audiovisual container formats. Patch
+by Hugo van Kemenade.

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to