diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/mimetypes.py | 22 | ||||
-rw-r--r-- | Lib/test/test_mimetypes.py | 3 |
2 files changed, 14 insertions, 11 deletions
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index 2872ee4..3e742a7 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -249,19 +249,21 @@ class MimeTypes: yield ctype i += 1 - with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, - r'MIME\Database\Content Type') as mimedb: - for ctype in enum_types(mimedb): + with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr: + for subkeyname in enum_types(hkcr): try: - with _winreg.OpenKey(mimedb, ctype) as key: - suffix, datatype = _winreg.QueryValueEx(key, - 'Extension') + with _winreg.OpenKey(hkcr, subkeyname) as subkey: + # Only check file extensions + if not subkeyname.startswith("."): + continue + # raises EnvironmentError if no 'Content Type' value + mimetype, datatype = _winreg.QueryValueEx( + subkey, 'Content Type') + if datatype != _winreg.REG_SZ: + continue + self.add_type(mimetype, subkeyname, strict) except EnvironmentError: continue - if datatype != _winreg.REG_SZ: - continue - self.add_type(ctype, suffix, strict) - def guess_type(url, strict=True): """Guess the type of a file based on its URL. diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py index 593fdb0..0b53032 100644 --- a/Lib/test/test_mimetypes.py +++ b/Lib/test/test_mimetypes.py @@ -98,7 +98,8 @@ class Win32MimeTypesTestCase(unittest.TestCase): # Use file types that should *always* exist: eq = self.assertEqual eq(self.db.guess_type("foo.txt"), ("text/plain", None)) - + eq(self.db.guess_type("image.jpg"), ("image/jpeg", None)) + eq(self.db.guess_type("image.png"), ("image/png", None)) def test_main(): support.run_unittest(MimeTypesTestCase, |