gh-131178: Fix mimetypes CLI docs, mention that errors go to stdout (#149683)

Co-authored-by: sobolevn <mail@sobolevn.me>
This commit is contained in:
htjworld 2026-05-31 16:45:48 +09:00 committed by GitHub
parent 5b5ffce05c
commit 2b94b92394
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 60 additions and 4 deletions

View 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

View file

@ -6,8 +6,9 @@
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 @@ def test_invocation_error(self):
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()