]> granicus.if.org Git - python/commitdiff
Fix for bug #442374 - Modulefinder registry support broken
authorMark Hammond <mhammond@skippinet.com.au>
Wed, 5 Sep 2001 23:42:36 +0000 (23:42 +0000)
committerMark Hammond <mhammond@skippinet.com.au>
Wed, 5 Sep 2001 23:42:36 +0000 (23:42 +0000)
Tools/freeze/modulefinder.py

index 42cbbab038b257fd2a6e37eb48c81027e4cf3f46..015708be3b0e8bc3842aac533337b3ebde60b6ae 100644 (file)
@@ -47,6 +47,38 @@ class Module:
         s = s + ")"
         return s
 
+_warned = 0
+
+def _try_registry(name):
+    # Emulate the Registered Module support on Windows.
+    try:
+        import _winreg
+        RegQueryValue = _winreg.QueryValue
+        HKLM = _winreg.HKEY_LOCAL_MACHINE
+        exception = _winreg.error
+    except ImportError:
+        try:
+            import win32api
+            RegQueryValue = win32api.RegQueryValue
+            HKLM = 0x80000002 # HKEY_LOCAL_MACHINE
+            exception = win32api.error
+        except ImportError:
+            global _warned
+            if not _warned:
+                _warned = 1
+                print "Warning: Neither _winreg nor win32api is available - modules"
+                print "listed in the registry will not be found"
+            return None
+    try:
+        pathname = RegQueryValue(HKLM, \
+         r"Software\Python\PythonCore\%s\Modules\%s" % (sys.winver, name))
+        fp = open(pathname, "rb")
+    except exception:
+        return None
+    else:
+        # XXX - To do - remove the hard code of C_EXTENSION.
+        stuff = "", "rb", imp.C_EXTENSION
+        return fp, pathname, stuff
 
 class ModuleFinder:
 
@@ -332,20 +364,11 @@ class ModuleFinder:
             if name in sys.builtin_module_names:
                 return (None, None, ("", "", imp.C_BUILTIN))
 
-            # Emulate the Registered Module support on Windows.
             if sys.platform=="win32":
-                import _winreg
-                from _winreg import HKEY_LOCAL_MACHINE
-                try:
-                    pathname = _winreg.QueryValueEx(HKEY_LOCAL_MACHINE, \
-                        "Software\\Python\\PythonCore\\%s\\Modules\\%s" % (sys.winver, name))
-                    fp = open(pathname, "rb")
-                    # XXX - To do - remove the hard code of C_EXTENSION.
-                    stuff = "", "rb", imp.C_EXTENSION
-                    return fp, pathname, stuff
-                except _winreg.error:
-                    pass
-
+                result = _try_registry(name)
+                if result:
+                    return result
+                    
             path = self.path
         return imp.find_module(name, path)