break
i += 1
+ default_encoding = sys.getdefaultencoding()
with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr:
for subkeyname in enum_types(hkcr):
- # Only check file extensions, not all possible classes
- if not subkeyname.startswith("."):
- continue
-
- with _winreg.OpenKey(hkcr, subkeyname) as subkey:
- # If there is no "Content Type" value, or if it is not
- # a simple string, simply skip
- try:
+ try:
+ 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')
- except EnvironmentError:
- continue
- if datatype != _winreg.REG_SZ:
- continue
- self.add_type(mimetype, subkeyname, strict)
+ if datatype != _winreg.REG_SZ:
+ continue
+ try:
+ mimetype = mimetype.encode(default_encoding)
+ except UnicodeEncodeError:
+ continue
+ self.add_type(mimetype, subkeyname, strict)
+ except EnvironmentError:
+ continue
def guess_type(url, strict=True):
"""Guess the type of a file based on its URL.
+# -*- coding: utf-8 -*-
+
import mimetypes
import StringIO
import unittest
def __getattr__(self, name):
if name == 'EnumKey':
return lambda key, i: _winreg.EnumKey(key, i) + "\xa3"
- elif name == "OpenKey":
+ elif name == 'OpenKey':
return lambda key, name: _winreg.OpenKey(key, name.rstrip("\xa3"))
elif name == 'QueryValueEx':
- return lambda subkey, label: (label + "\xa3", _winreg.REG_SZ)
+ return lambda subkey, label: (u'текст/простой' , _winreg.REG_SZ)
return getattr(_winreg, name)
mimetypes._winreg = MockWinreg()
class MockWinreg(object):
def __getattr__(self, name):
if name == 'QueryValueEx':
- return lambda subkey, label: (label + "\xa3", _winreg.REG_SZ)
+ return lambda subkey, label: (u'текст/простой', _winreg.REG_SZ)
return getattr(_winreg, name)
mimetypes._winreg = MockWinreg()
finally:
mimetypes._winreg = _winreg
+ def test_type_map_values(self):
+ import _winreg
+
+ class MockWinreg(object):
+ def __getattr__(self, name):
+ if name == 'QueryValueEx':
+ return lambda subkey, label: (u'text/plain', _winreg.REG_SZ)
+ return getattr(_winreg, name)
+
+ mimetypes._winreg = MockWinreg()
+ try:
+ mimetypes.init()
+ self.assertTrue(isinstance(mimetypes.types_map.values()[0], str))
+ finally:
+ mimetypes._winreg = _winreg
+
def test_main():
test_support.run_unittest(MimeTypesTestCase,
Win32MimeTypesTestCase