diff options
author | Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> | 2024-11-21 14:55:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-21 14:55:28 (GMT) |
commit | dc7a2b6522ec7af41282bc34f405bee9b306d611 (patch) | |
tree | 9b10bbad365095412ea89bcd8d9ea4438849d9e3 | |
parent | bab4b0462ebd782dd6965beb0ccae6341af43ceb (diff) | |
download | cpython-dc7a2b6522ec7af41282bc34f405bee9b306d611.zip cpython-dc7a2b6522ec7af41282bc34f405bee9b306d611.tar.gz cpython-dc7a2b6522ec7af41282bc34f405bee9b306d611.tar.bz2 |
gh-118761: Improve import time of `mimetypes` (#126979)
-rw-r--r-- | Lib/mimetypes.py | 22 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2024-11-18-22-02-47.gh-issue-118761.GQKD_J.rst | 2 |
2 files changed, 18 insertions, 6 deletions
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index 61cba1a..7532383 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -23,11 +23,6 @@ init([files]) -- parse a list of files, default knownfiles (on Windows, the read_mime_types(file) -- parse one file, return a dictionary or None """ -import os -import sys -import posixpath -import urllib.parse - try: from _winapi import _mimetypes_read_windows_registry except ImportError: @@ -119,6 +114,10 @@ class MimeTypes: Optional 'strict' argument when False adds a bunch of commonly found, but non-standard types. """ + # Lazy import to improve module import time + import os + import urllib.parse + # TODO: Deprecate accepting file paths (in particular path-like objects). url = os.fspath(url) p = urllib.parse.urlparse(url) @@ -146,6 +145,10 @@ class MimeTypes: if '=' in type or '/' not in type: type = 'text/plain' return type, None # never compressed, so encoding is None + + # Lazy import to improve module import time + import posixpath + return self._guess_file_type(url, strict, posixpath.splitext) def guess_file_type(self, path, *, strict=True): @@ -153,6 +156,9 @@ class MimeTypes: Similar to guess_type(), but takes file path instead of URL. """ + # Lazy import to improve module import time + import os + path = os.fsdecode(path) path = os.path.splitdrive(path)[1] return self._guess_file_type(path, strict, os.path.splitext) @@ -399,6 +405,9 @@ def init(files=None): else: db = _db + # Lazy import to improve module import time + import os + for file in files: if os.path.isfile(file): db.read(file) @@ -445,7 +454,7 @@ def _default_mime_types(): } # Before adding new types, make sure they are either registered with IANA, - # at http://www.iana.org/assignments/media-types + # at https://www.iana.org/assignments/media-types/media-types.xhtml # or extensions, i.e. using the x- prefix # If you add to these, please keep them sorted by mime type. @@ -646,6 +655,7 @@ _default_mime_types() def _main(): import getopt + import sys USAGE = """\ Usage: mimetypes.py [options] type diff --git a/Misc/NEWS.d/next/Library/2024-11-18-22-02-47.gh-issue-118761.GQKD_J.rst b/Misc/NEWS.d/next/Library/2024-11-18-22-02-47.gh-issue-118761.GQKD_J.rst new file mode 100644 index 0000000..ebb9fe8 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-11-18-22-02-47.gh-issue-118761.GQKD_J.rst @@ -0,0 +1,2 @@ +Improve import time of :mod:`mimetypes` by around 11-16 times. Patch by Hugo +van Kemenade. |