Skip to content

Commit 3c6d2d1

Browse files
hugovkzwareJelleZijlstra
authored
gh-89416: Add RFC 9559 MIME types for Matroska formats (#126412)
Co-authored-by: Zachary Ware <zachary.ware@gmail.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
1 parent 4f3253a commit 3c6d2d1

File tree

4 files changed

+46
-20
lines changed

4 files changed

+46
-20
lines changed

Doc/whatsnew/3.14.rst

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,19 @@ json
363363
(Contributed by Trey Hunner in :gh:`122873`.)
364364

365365

366+
mimetypes
367+
---------
368+
369+
* Add :rfc:`9559` MIME types for Matroska audiovisual data container
370+
structures, containing:
371+
372+
* audio with no video: ``audio/matroska`` (``.mka``)
373+
* video: ``video/matroska`` (``.mkv``)
374+
* stereoscopic video: ``video/matroska-3d`` (``.mk3d``)
375+
376+
(Contributed by Hugo van Kemenade in :gh:`89416`.)
377+
378+
366379
multiprocessing
367380
---------------
368381

@@ -382,6 +395,7 @@ multiprocessing
382395

383396
(Contributed by Roy Hyunjin Han for :gh:`103134`)
384397

398+
385399
operator
386400
--------
387401

Lib/mimetypes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,7 @@ def _default_mime_types():
534534
'.ass' : 'audio/aac',
535535
'.au' : 'audio/basic',
536536
'.snd' : 'audio/basic',
537+
'.mka' : 'audio/matroska',
537538
'.mp3' : 'audio/mpeg',
538539
'.mp2' : 'audio/mpeg',
539540
'.opus' : 'audio/opus',
@@ -595,6 +596,8 @@ def _default_mime_types():
595596
'.sgml' : 'text/x-sgml',
596597
'.vcf' : 'text/x-vcard',
597598
'.xml' : 'text/xml',
599+
'.mkv' : 'video/matroska',
600+
'.mk3d' : 'video/matroska-3d',
598601
'.mp4' : 'video/mp4',
599602
'.mpeg' : 'video/mpeg',
600603
'.m1v' : 'video/mpeg',

Lib/test/test_mimetypes.py

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -223,26 +223,33 @@ def test_guess_known_extensions(self):
223223

224224
def test_preferred_extension(self):
225225
def check_extensions():
226-
self.assertEqual(mimetypes.guess_extension('application/octet-stream'), '.bin')
227-
self.assertEqual(mimetypes.guess_extension('application/postscript'), '.ps')
228-
self.assertEqual(mimetypes.guess_extension('application/vnd.apple.mpegurl'), '.m3u')
229-
self.assertEqual(mimetypes.guess_extension('application/vnd.ms-excel'), '.xls')
230-
self.assertEqual(mimetypes.guess_extension('application/vnd.ms-powerpoint'), '.ppt')
231-
self.assertEqual(mimetypes.guess_extension('application/x-texinfo'), '.texi')
232-
self.assertEqual(mimetypes.guess_extension('application/x-troff'), '.roff')
233-
self.assertEqual(mimetypes.guess_extension('application/xml'), '.xsl')
234-
self.assertEqual(mimetypes.guess_extension('audio/mpeg'), '.mp3')
235-
self.assertEqual(mimetypes.guess_extension('image/avif'), '.avif')
236-
self.assertEqual(mimetypes.guess_extension('image/webp'), '.webp')
237-
self.assertEqual(mimetypes.guess_extension('image/jpeg'), '.jpg')
238-
self.assertEqual(mimetypes.guess_extension('image/tiff'), '.tiff')
239-
self.assertEqual(mimetypes.guess_extension('message/rfc822'), '.eml')
240-
self.assertEqual(mimetypes.guess_extension('text/html'), '.html')
241-
self.assertEqual(mimetypes.guess_extension('text/plain'), '.txt')
242-
self.assertEqual(mimetypes.guess_extension('text/rtf'), '.rtf')
243-
self.assertEqual(mimetypes.guess_extension('text/x-rst'), '.rst')
244-
self.assertEqual(mimetypes.guess_extension('video/mpeg'), '.mpeg')
245-
self.assertEqual(mimetypes.guess_extension('video/quicktime'), '.mov')
226+
for mime_type, ext in (
227+
("application/octet-stream", ".bin"),
228+
("application/postscript", ".ps"),
229+
("application/vnd.apple.mpegurl", ".m3u"),
230+
("application/vnd.ms-excel", ".xls"),
231+
("application/vnd.ms-powerpoint", ".ppt"),
232+
("application/x-texinfo", ".texi"),
233+
("application/x-troff", ".roff"),
234+
("application/xml", ".xsl"),
235+
("audio/matroska", ".mka"),
236+
("audio/mpeg", ".mp3"),
237+
("image/avif", ".avif"),
238+
("image/webp", ".webp"),
239+
("image/jpeg", ".jpg"),
240+
("image/tiff", ".tiff"),
241+
("message/rfc822", ".eml"),
242+
("text/html", ".html"),
243+
("text/plain", ".txt"),
244+
("text/rtf", ".rtf"),
245+
("text/x-rst", ".rst"),
246+
("video/matroska", ".mkv"),
247+
("video/matroska-3d", ".mk3d"),
248+
("video/mpeg", ".mpeg"),
249+
("video/quicktime", ".mov"),
250+
):
251+
with self.subTest(mime_type=mime_type, ext=ext):
252+
self.assertEqual(mimetypes.guess_extension(mime_type), ext)
246253

247254
check_extensions()
248255
mimetypes.init()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Add :rfc:`9559` MIME types for Matroska audiovisual container formats. Patch
2+
by Hugo van Kemenade.

0 commit comments

Comments
 (0)