diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-04-27 20:50:20 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-04-27 20:50:20 (GMT) |
commit | f2651e193c43a0cadc3ef4d94cfbe74a1be862bb (patch) | |
tree | 33c5c83740d33810e0d2a916330b12112583f6fc /Lib | |
parent | cac7af6863a997376bffe00ecf07a62c5618a5d9 (diff) | |
download | cpython-f2651e193c43a0cadc3ef4d94cfbe74a1be862bb.zip cpython-f2651e193c43a0cadc3ef4d94cfbe74a1be862bb.tar.gz cpython-f2651e193c43a0cadc3ef4d94cfbe74a1be862bb.tar.bz2 |
Issue #5853: calling a function of the mimetypes module from several threads
at once could hit the recursion limit if the mimetypes database hadn't been
initialized before.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/mimetypes.py | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index 6212e78..f0a5ecf 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -44,6 +44,7 @@ knownfiles = [ ] inited = False +_db = None class MimeTypes: @@ -237,9 +238,9 @@ def guess_type(url, strict=True): Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. """ - if not inited: + if _db is None: init() - return guess_type(url, strict) + return _db.guess_type(url, strict) def guess_all_extensions(type, strict=True): @@ -255,9 +256,9 @@ def guess_all_extensions(type, strict=True): Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. """ - if not inited: + if _db is None: init() - return guess_all_extensions(type, strict) + return _db.guess_all_extensions(type, strict) def guess_extension(type, strict=True): """Guess the extension for a file based on its MIME type. @@ -271,9 +272,9 @@ def guess_extension(type, strict=True): Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. """ - if not inited: + if _db is None: init() - return guess_extension(type, strict) + return _db.guess_extension(type, strict) def add_type(type, ext, strict=True): """Add a mapping between a type and an extension. @@ -287,16 +288,15 @@ def add_type(type, ext, strict=True): list of standard types, else to the list of non-standard types. """ - if not inited: + if _db is None: init() - return add_type(type, ext, strict) + return _db.add_type(type, ext, strict) def init(files=None): - global guess_all_extensions, guess_extension, guess_type global suffix_map, types_map, encodings_map, common_types - global add_type, inited - inited = True + global inited, _db + inited = True # so that MimeTypes.__init__() doesn't call us again db = MimeTypes() if files is None: files = knownfiles @@ -306,11 +306,9 @@ def init(files=None): encodings_map = db.encodings_map suffix_map = db.suffix_map types_map = db.types_map[True] - guess_all_extensions = db.guess_all_extensions - guess_extension = db.guess_extension - guess_type = db.guess_type - add_type = db.add_type common_types = db.types_map[False] + # Make the DB a global variable now that it is fully initialized + _db = db def read_mime_types(file): |