diff -r eb251e3624df Lib/mimetypes.py --- a/Lib/mimetypes.py Fri Jan 24 00:33:25 2014 -0500 +++ b/Lib/mimetypes.py Fri Jan 24 17:31:16 2014 +0800 @@ -359,13 +359,18 @@ def read_mime_types(file): + f = None try: f = open(file) + db = MimeTypes() + db.readfp(f, True) except OSError: return None - db = MimeTypes() - db.readfp(f, True) - return db.types_map[True] + else: + return db.types_map[True] + finally: + if f is not None: + f.close() def _default_mime_types(): diff -r eb251e3624df Lib/test/test_mimetypes.py --- a/Lib/test/test_mimetypes.py Fri Jan 24 00:33:25 2014 -0500 +++ b/Lib/test/test_mimetypes.py Fri Jan 24 17:31:16 2014 +0800 @@ -40,6 +40,19 @@ ("x-application/x-unittest", None)) eq(self.db.guess_extension("x-application/x-unittest"), ".pyunit") + def test_read_mime_types(self): + self.addCleanup(support.unlink, support.TESTFN) + with open(support.TESTFN, "w") as file: + file.write("x-application/mimea mimea\n") + file.write("application/mimeb mimeb\n") + mime_types = mimetypes.read_mime_types(support.TESTFN) + self.assertEqual(mime_types['.mimea'], 'x-application/mimea') + self.assertEqual(mime_types['.mimeb'], 'application/mimeb') + + def test_read_mime_types_with_non_existent_file(self): + mime_types = mimetypes.read_mime_types('not_an_existing_mime_file') + self.assertIsNone(mime_types) + def test_non_standard_types(self): eq = self.assertEqual # First try strict