getDefaultDatabase() should be a toplevel function, not a method of the
preferences object.
diff --git a/Lib/plat-mac/pimp.py b/Lib/plat-mac/pimp.py
index fc97ea3..131d5b0 100644
--- a/Lib/plat-mac/pimp.py
+++ b/Lib/plat-mac/pimp.py
@@ -46,6 +46,51 @@
 DEFAULT_INSTALLDIR=distutils.sysconfig.get_python_lib()
 DEFAULT_PIMPDATABASE_FMT="http://www.python.org/packman/version-%s/%s-%s-%s-%s-%s.plist"
 
+def getDefaultDatabase(experimental=False):
+	if experimental:
+		status = "exp"
+	else:
+		status = "prod"
+		
+	major, minor, micro, state, extra = sys.version_info
+	pyvers = '%d.%d' % (major, minor)
+	if state != 'final':
+		pyvers = pyvers + '%s%d' % (state, extra)
+		
+	longplatform = distutils.util.get_platform()
+	osname, release, machine = longplatform.split('-')
+	# For some platforms we may want to differentiate between
+	# installation types
+	if osname == 'darwin':
+		if sys.prefix.startswith('/System/Library/Frameworks/Python.framework'):
+			osname = 'darwin_apple'
+		elif sys.prefix.startswith('/Library/Frameworks/Python.framework'):
+			osname = 'darwin_macpython'
+		# Otherwise we don't know...
+	# Now we try various URLs by playing with the release string.
+	# We remove numbers off the end until we find a match.
+	rel = release
+	while True:
+		url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, rel, machine)
+		try:
+			urllib2.urlopen(url)
+		except urllib2.HTTPError, arg:
+			pass
+		else:
+			break
+		if not rel:
+			# We're out of version numbers to try. Use the
+			# full release number, this will give a reasonable
+			# error message later
+			url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, release, machine)
+			break
+		idx = rel.rfind('.')
+		if idx < 0:
+			rel = ''
+		else:
+			rel = rel[:idx]
+	return url
+
 def _cmd(output, dir, *cmditems):
     """Internal routine to run a shell command in a given directory."""
     
@@ -163,7 +208,7 @@
         if not buildDir:
             buildDir = DEFAULT_BUILDDIR
         if not pimpDatabase:
-            pimpDatabase = self.getDefaultDatabase()
+            pimpDatabase = getDefaultDatabase()
         self.setInstallDir(installDir)
         self.flavorOrder = flavorOrder
         self.downloadDir = downloadDir
@@ -185,53 +230,6 @@
         
     def isUserInstall(self):
         return self.installDir != DEFAULT_INSTALLDIR
-        
-    def getDefaultDatabase(self, experimental=False):
-        if experimental:
-            status = "exp"
-        else:
-            status = "prod"
-            
-        major, minor, micro, state, extra = sys.version_info
-        pyvers = '%d.%d' % (major, minor)
-        if state != 'final':
-            pyvers = pyvers + '%s%d' % (state, extra)
-            
-        longplatform = distutils.util.get_platform()
-        osname, release, machine = longplatform.split('-')
-        # For some platforms we may want to differentiate between
-        # installation types
-        if osname == 'darwin':
-            if sys.prefix.startswith('/System/Library/Frameworks/Python.framework'):
-                osname = 'darwin_apple'
-            elif sys.prefix.startswith('/Library/Frameworks/Python.framework'):
-                osname = 'darwin_macpython'
-            # Otherwise we don't know...
-        # Now we try various URLs by playing with the release string.
-        # We remove numbers off the end until we find a match.
-        rel = release
-        while True:
-            url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, rel, machine)
-            try:
-                urllib2.urlopen(url)
-            except urllib2.HTTPError, arg:
-            	print 'getDefaultDatabase: cannot open', url
-            	print 'error', arg
-                pass
-            else:
-                break
-            if not rel:
-                # We're out of version numbers to try. Use the
-                # full release number, this will give a reasonable
-                # error message later
-                url = DEFAULT_PIMPDATABASE_FMT % (PIMP_VERSION, status, pyvers, osname, release, machine)
-                break
-            idx = rel.rfind('.')
-            if idx < 0:
-                rel = ''
-            else:
-                rel = rel[:idx]
-        return url
 
     def check(self):
         """Check that the preferences make sense: directories exist and are