# /usr, /usr/local, etc.
PREFIXES = [ '/Library/Python/2.3/',
'/Library/Python/2.4/',
- '/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-pacakges/',
- '/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-pacakges/',
+ '/Library/Python/2.5/',
+ '/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/',
+ '/Library/Frameworks/Python.framework/Versions/2.4/lib/python2.4/site-packages/',
+ '/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/',
'/usr/local/lib/',
]
class AccessError(Exception):
pass
+class ReceiptError(Exception):
+ pass
+
class InstalledReceipt(object):
def __init__(self, rcptPath):
self.rcptPath = rcptPath
self.rsrcPath = os.path.join(rcptPath, RSRCDIR)
- self.bomFile = glob.glob(os.path.join(self.rsrcPath, "*.bom"))[0]
+ bf = glob.glob(os.path.join(self.rsrcPath, "*.bom"))
+ if bf:
+ self.bomFile = bf[0]
+ else:
+ print "WARNING: Unable to find %s/*.bom" % self.rsrcPath
+ raise ReceiptError
self.findMetaData()
def findMetaData(self):
# TODO: Make this be able to also look at Info.plist files
- infoFile = glob.glob(os.path.join(self.rsrcPath, "*.info"))[0]
- self.mdata = {}
- for line in open(infoFile, "r").readlines():
- line = line.strip()
- if line and line[0] != '#':
- ls = line.split()
- self.mdata[ls[0]] = line[len(ls[0])+1:]
-
+ infoFiles = glob.glob(os.path.join(self.rsrcPath, "*.info"))
+ if infoFiles:
+ # there should be only one
+ infoFile = infoFiles[0]
+ self.mdata = {}
+ for line in open(infoFile, "r").readlines():
+ line = line.strip()
+ if line and line[0] != '#':
+ ls = line.split()
+ self.mdata[ls[0]] = line[len(ls[0])+1:]
+ else:
+ print "WARNING: Unable to find %s/*.info" % self.rsrcPath
+ raise ReceiptError
+
def getFileList(self):
p = os.popen("lsbom -s %s" % self.bomFile, "r")
handleFile(name)
handleDir(dirpath)
+ # wxaddons should be always kept as the user may have installed
+ # third-party modules seperate from wxpython.
+ def testWxaddons(self, name):
+ for prefix in PREFIXES:
+ if name.startswith(prefix + "wxaddons"):
+ return True
+ return False
def testCommon(self, name):
for cmn in COMMON_FILES:
if os.path.exists(name):
if not self.lastInstall and self.testCommon(name):
return
+ if self.testWxaddons(name):
+ return
print "Will remove:", name
self.walkFiles(show, show)
if os.path.exists(name):
if not self.lastInstall and self.testCommon(name):
return
+ if self.testWxaddons(name):
+ return
print "Removing:", name
os.unlink(name)
def removeDir(name):
print "Removing:", name
- if os.path.exists(name):
+ if os.path.exists(name) and not self.testWxaddons(name):
hasFiles = os.listdir(name)
if hasFiles: # perhaps some stale symlinks, or .pyc files
for file in hasFiles:
def findInstalled():
installed = []
for name in glob.glob(os.path.join(RCPTDIR, "wxPython*")):
- ir = InstalledReceipt(name)
- installed.append(ir)
+ try:
+ ir = InstalledReceipt(name)
+ installed.append(ir)
+ except ReceiptError:
+ pass # just skip it...
return installed
sys.exit()
for i, inst in enumerate(installed):
- print " %d. %s \t%s" % (i+1, inst.mdata["Title"], inst.mdata["Version"])
+ print " %2d. %-40s %s" % (i+1, inst.mdata["Title"], inst.mdata["Version"])
print
ans = raw_input("Enter the number of the install to examine or 'Q' to quit: ")