Issue #15207: Fix mimetypes to read from correct area in Windows registry (Original patch by Dave Chambers)
This commit is contained in:
commit
a4df90ceb9
|
@ -85,6 +85,9 @@ behavior of the module.
|
|||
:const:`knownfiles` takes precedence over those named before it. Calling
|
||||
:func:`init` repeatedly is allowed.
|
||||
|
||||
Specifying an empty list for *files* will prevent the system defaults from
|
||||
being applied: only the well-known values will be present from a built-in list.
|
||||
|
||||
.. versionchanged:: 3.2
|
||||
Previously, Windows registry settings were ignored.
|
||||
|
||||
|
|
|
@ -243,25 +243,27 @@ class MimeTypes:
|
|||
while True:
|
||||
try:
|
||||
ctype = _winreg.EnumKey(mimedb, i)
|
||||
except OSError:
|
||||
except EnvironmentError:
|
||||
break
|
||||
else:
|
||||
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')
|
||||
except OSError:
|
||||
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.
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -209,6 +209,7 @@ Per Cederqvist
|
|||
Matej Cepl
|
||||
Carl Cerecke
|
||||
Octavian Cerna
|
||||
Dave Chambers
|
||||
Pascal Chambon
|
||||
John Chandler
|
||||
Hye-Shik Chang
|
||||
|
|
Loading…
Reference in New Issue