]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-131178: Fix mimetypes CLI docs, mention that errors go to stdout (#149683)
authorhtjworld <116538001+htjworld@users.noreply.github.com>
Sun, 31 May 2026 07:45:48 +0000 (16:45 +0900)
committerGitHub <noreply@github.com>
Sun, 31 May 2026 07:45:48 +0000 (07:45 +0000)
Co-authored-by: sobolevn <mail@sobolevn.me>
Doc/library/mimetypes.rst
Lib/test/test_mimetypes.py

index 5103eacde1dd5b5627f73bd9f0d12047fb5214c8..f33098faf7d8a775de329429680be727e7bb370c 100644 (file)
@@ -358,7 +358,7 @@ it converts file extensions to MIME types.
 
 For each ``type`` entry, the script writes a line into the standard output
 stream. If an unknown type occurs, it writes an error message into the
-standard error stream and exits with the return code ``1``.
+standard output stream and exits with the return code ``1``.
 
 
 .. mimetypes-cli-example:
@@ -385,7 +385,7 @@ interface:
 
    $ # get a MIME type for a rare file extension
    $ python -m mimetypes filename.pict
-   error: unknown extension of filename.pict
+   error: media type unknown for filename.pict
 
    $ # now look in the extended database built into Python
    $ python -m mimetypes --lenient filename.pict
@@ -407,7 +407,8 @@ interface:
    $ python -m mimetypes filename.sh filename.nc filename.xxx filename.txt
    type: application/x-sh encoding: None
    type: application/x-netcdf encoding: None
-   error: unknown extension of filename.xxx
+   error: media type unknown for filename.xxx
+   type: text/plain encoding: None
 
    $ # try to feed an unknown MIME type
    $ python -m mimetypes --extension audio/aac audio/opus audio/future audio/x-wav
index 607aff8418edcfeb5fb283f6ca36b21dced06191..eccdc5bdf70795111d58a565e23d00e6f4f4a078 100644 (file)
@@ -6,8 +6,9 @@ import sys
 import unittest.mock
 from platform import win32_edition
 from test import support
-from test.support import cpython_only, force_not_colorized, os_helper
+from test.support import cpython_only, force_not_colorized, os_helper, requires_subprocess
 from test.support.import_helper import ensure_lazy_imports
+from test.support.script_helper import assert_python_ok, assert_python_failure
 
 try:
     import _winapi
@@ -511,5 +512,59 @@ class CommandLineTest(unittest.TestCase):
                 self.assertEqual(result, expected)
 
 
+@requires_subprocess()
+class CommandLineSubprocessTest(unittest.TestCase):
+    def test_help(self):
+        rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', '--help')
+        self.assertIn(b'mimetypes', stdout)
+        self.assertIn(b'--extension', stdout)
+        self.assertIn(b'--lenient', stdout)
+
+    def test_type_lookup(self):
+        rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', 'foo.pdf')
+        self.assertEqual(stdout.strip(), b'type: application/pdf encoding: None')
+        self.assertEqual(stderr, b'')
+
+    def test_type_lookup_unknown(self):
+        rc, stdout, stderr = assert_python_failure('-m', 'mimetypes', 'foo.unknownext12345')
+        self.assertEqual(stdout.strip(), b'error: media type unknown for foo.unknownext12345')
+        self.assertEqual(stderr, b'')
+
+    def test_extension_flag(self):
+        rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', '-e', 'image/jpeg')
+        self.assertEqual(stdout.strip(), b'.jpg')
+        self.assertEqual(stderr, b'')
+
+    def test_extension_flag_unknown(self):
+        rc, stdout, stderr = assert_python_failure('-m', 'mimetypes', '-e', 'image/unknowntype12345')
+        self.assertEqual(stdout.strip(), b'error: unknown type image/unknowntype12345')
+        self.assertEqual(stderr, b'')
+
+    def test_lenient_flag(self):
+        rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', '-e', '--lenient', 'text/xul')
+        self.assertIn(b'.xul', stdout)
+        self.assertEqual(stderr, b'')
+
+    def test_multiple_inputs(self):
+        rc, stdout, stderr = assert_python_ok('-m', 'mimetypes', 'foo.pdf', 'foo.png')
+        self.assertIn(b'type: application/pdf encoding: None', stdout)
+        self.assertIn(b'type: image/png encoding: None', stdout)
+        self.assertEqual(stderr, b'')
+
+    def test_multiple_inputs_with_error(self):
+        rc, stdout, stderr = assert_python_failure(
+            '-m', 'mimetypes', 'foo.pdf', 'foo.unknownext12345'
+        )
+        self.assertIn(b'type: application/pdf encoding: None', stdout)
+        self.assertIn(b'error: media type unknown for foo.unknownext12345', stdout)
+        self.assertEqual(stderr, b'')
+
+    @force_not_colorized
+    def test_unknown_flag(self):
+        rc, stdout, stderr = assert_python_failure('-m', 'mimetypes', '--unknown-flag', 'foo.pdf')
+        self.assertEqual(stdout, b'')
+        self.assertIn(b'error: unrecognized arguments: --unknown-flag', stderr)
+
+
 if __name__ == "__main__":
     unittest.main()