New submission from S Arrowsmith <si...@chiark.greenend.org.uk>: Asking mimetypes to reload mime.types can cause guess_extension() to return a different result if multiple extensions are mapped to that mime type:
>>> import mimetypes >>> mimetypes.guess_extension('image/jpeg') '.jpe' >>> mimetypes.init() >>> mimetypes.guess_extension('image/jpeg') '.jpeg' >>> This is because both the forward (extension to type) and inverse (type to extension) type mapping dicts are populated by iterating through the existing forward (extension to type) dict (types_map), then supplemented by reading from mime.types (or any other files given to init()). The fully populated forward dict becomes the new types_map. Initially, types_map is hard-coded, but when the type mapping dicts are repopulated, by explicitly or implicitly calling init() again, it is done by iterating over the types_map created by the first init() call, not the hard-coded one. If the iteration order for a set of extensions with the same type is different in these two versions of the forward dict, the order of extensions appearing for that type in the inverse dict will change. And so the behavior of guess_all_extensions() and hence guess_extension() will change. ---------- components: Library (Lib) messages: 79955 nosy: siona severity: normal status: open title: mimetypes.guess_extension result changes after mimetypes.init() type: behavior versions: Python 2.4, Python 2.5 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue4963> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com