[Python-checkins] python/dist/src/Mac/Tools/IDE PackageManager.py,1.6,1.7
jackjansen@users.sourceforge.net
jackjansen@users.sourceforge.net
Wed, 16 Apr 2003 05:17:59 -0700
Update of /cvsroot/python/python/dist/src/Mac/Tools/IDE
In directory sc8-pr-cvs1:/tmp/cvs-serv4287
Modified Files:
PackageManager.py
Log Message:
Added support for per-user installs.
Don't show psuedo-packages by default, added a button to show them.
Cleaned up interface a little (not enough, though).
Index: PackageManager.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Tools/IDE/PackageManager.py,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** PackageManager.py 15 Apr 2003 21:59:42 -0000 1.6
--- PackageManager.py 16 Apr 2003 12:17:56 -0000 1.7
***************
*** 48,51 ****
--- 48,57 ----
ELIPSES = '...'
+ USER_INSTALL_DIR = os.path.join(os.environ.get('HOME', ''),
+ 'Library',
+ 'Python',
+ sys.version[:3],
+ 'site-packages')
+
class PackageManagerMain(Wapplication.Application):
***************
*** 226,229 ****
--- 232,242 ----
except IOError, arg:
return "Cannot open %s: %s" % (url, arg)
+ # Check whether we can write the installation directory.
+ # If not, set to the per-user directory, possibly
+ # creating it, if needed.
+ installDir = self.pimpprefs.installDir
+ if not os.access(installDir, os.R_OK|os.W_OK|os.X_OK):
+ rv = self.setuserinstall(1)
+ if rv: return rv
return self.pimpprefs.check()
***************
*** 235,243 ****
self.packages = []
! def getbrowserdata(self):
self.packages = self.pimpdb.list()
rv = []
for pkg in self.packages:
name = pkg.fullname()
status, _ = pkg.installed()
description = pkg.description()
--- 248,278 ----
self.packages = []
! def setuserinstall(self, onoff):
! rv = ""
! if onoff:
! if not os.path.exists(USER_INSTALL_DIR):
! try:
! os.makedirs(USER_INSTALL_DIR)
! except OSError, arg:
! rv = rv + arg + "\n"
! if not USER_INSTALL_DIR in sys.path:
! import site
! reload(site)
! self.pimpprefs.setInstallDir(USER_INSTALL_DIR)
! else:
! self.pimpprefs.setInstallDir(None)
! rv = rv + self.pimpprefs.check()
! return rv
!
! def getuserinstall(self):
! return self.pimpprefs.installDir == USER_INSTALL_DIR
!
! def getbrowserdata(self, show_hidden=1):
self.packages = self.pimpdb.list()
rv = []
for pkg in self.packages:
name = pkg.fullname()
+ if name[0] == '(' and name[-1] == ')' and not show_hidden:
+ continue
status, _ = pkg.installed()
description = pkg.description()
***************
*** 249,253 ****
return pkg.installed()
! def installpackage(self, sel, output, recursive, force, user):
pkg = self.packages[sel]
list, messages = self.pimpinstaller.prepareInstall(pkg, force, recursive)
--- 284,288 ----
return pkg.installed()
! def installpackage(self, sel, output, recursive, force):
pkg = self.packages[sel]
list, messages = self.pimpinstaller.prepareInstall(pkg, force, recursive)
***************
*** 261,269 ****
def __init__(self, url = None):
self.ic = None
! msg = self.setuppimp(url)
! if msg:
! EasyDialogs.Message(msg)
self.setupwidgets()
self.updatestatus()
def close(self):
--- 296,303 ----
def __init__(self, url = None):
self.ic = None
! messages = self.setuppimp(url)
self.setupwidgets()
self.updatestatus()
+ self.showmessages(messages)
def close(self):
***************
*** 272,280 ****
def setupwidgets(self):
INSTALL_POS = -30
! STATUS_POS = INSTALL_POS - 62
self.w = W.Window((580, 400), "Python Install Manager", minsize = (400, 200), tabbable = 0)
! self.w.titlebar = W.TextBox((4, 4, 40, 12), 'Packages:')
data = self.getbrowserdata()
! self.w.packagebrowser = W.MultiList((4, 20, 0, STATUS_POS-2), data, self.listhit, cols=3)
self.w.installed_l = W.TextBox((4, STATUS_POS, 60, 12), 'Installed:')
--- 306,315 ----
def setupwidgets(self):
INSTALL_POS = -30
! STATUS_POS = INSTALL_POS - 70
self.w = W.Window((580, 400), "Python Install Manager", minsize = (400, 200), tabbable = 0)
! self.w.titlebar = W.TextBox((4, 8, 60, 18), 'Packages:')
! self.w.hidden_button = W.CheckBox((-100, 4, 0, 18), 'Show Hidden', self.updatestatus)
data = self.getbrowserdata()
! self.w.packagebrowser = W.MultiList((4, 24, 0, STATUS_POS-2), data, self.listhit, cols=3)
self.w.installed_l = W.TextBox((4, STATUS_POS, 60, 12), 'Installed:')
***************
*** 284,300 ****
self.w.homepage_button = W.Button((4, STATUS_POS+40, 96, 18), 'View homepage', self.do_homepage)
! self.w.divline = W.HorizontalLine((0, INSTALL_POS, 0, 0))
! self.w.verbose_button = W.CheckBox((-358, INSTALL_POS+4, 60, 18), 'Verbose')
! self.w.recursive_button = W.CheckBox((-284, INSTALL_POS+4, 140, 18), 'Install dependencies', self.updatestatus)
self.w.recursive_button.set(1)
! self.w.force_button = W.CheckBox((-160, INSTALL_POS+4, 70, 18), 'Overwrite', self.updatestatus)
! self.w.user_button = W.CheckBox((-90, INSTALL_POS+4, 100, 18), 'User Only')
! self.w.install_button = W.Button((4, INSTALL_POS+4, 56, 18), 'Install', self.do_install)
self.w.open()
def updatestatus(self):
sel = self.w.packagebrowser.getselection()
! data = self.getbrowserdata()
self.w.packagebrowser.setitems(data)
if len(sel) != 1:
self.w.installed.set('')
--- 319,336 ----
self.w.homepage_button = W.Button((4, STATUS_POS+40, 96, 18), 'View homepage', self.do_homepage)
! self.w.divline = W.HorizontalLine((0, INSTALL_POS-4, 0, 0))
! self.w.verbose_button = W.CheckBox((84, INSTALL_POS+4, 60, 18), 'Verbose')
! self.w.recursive_button = W.CheckBox((146, INSTALL_POS+4, 120, 18), 'Install dependencies', self.updatestatus)
self.w.recursive_button.set(1)
! self.w.force_button = W.CheckBox((268, INSTALL_POS+4, 70, 18), 'Overwrite', self.updatestatus)
! self.w.user_button = W.CheckBox((340, INSTALL_POS+4, 140, 18), 'For Current User Only', self.do_user)
! self.w.install_button = W.Button((4, INSTALL_POS+4, 56, 18), 'Install:', self.do_install)
self.w.open()
def updatestatus(self):
sel = self.w.packagebrowser.getselection()
! data = self.getbrowserdata(self.w.hidden_button.get())
self.w.packagebrowser.setitems(data)
+ self.w.user_button.set(self.getuserinstall())
if len(sel) != 1:
self.w.installed.set('')
***************
*** 317,321 ****
self.w.recursive_button.enable(1)
self.w.force_button.enable(1)
! self.w.user_button.enable(0) # XXXX
def listhit(self, *args, **kwargs):
--- 353,357 ----
self.w.recursive_button.enable(1)
self.w.force_button.enable(1)
! self.w.user_button.enable(1)
def listhit(self, *args, **kwargs):
***************
*** 330,338 ****
recursive = self.w.recursive_button.get()
force = self.w.force_button.get()
! user = self.w.user_button.get()
! messages = self.installpackage(sel, output, recursive, force, user)
self.updatestatus()
if messages:
! EasyDialogs.Message('\n'.join(messages))
def do_homepage(self):
--- 366,385 ----
recursive = self.w.recursive_button.get()
force = self.w.force_button.get()
! messages = self.installpackage(sel, output, recursive, force)
!
! # Re-read .pth files
! import site
! reload(site)
!
self.updatestatus()
+ self.showmessages(messages)
+
+ def showmessages(self, messages):
if messages:
! if type(messages) == list:
! messages = '\n'.join(messages)
! if self.w.verbose_button.get():
! sys.stdout.write(messages + '\n')
! EasyDialogs.Message(messages)
def do_homepage(self):
***************
*** 343,346 ****
--- 390,398 ----
self.ic = ic.IC()
self.ic.launchurl(self.packages[sel].homepage())
+
+ def do_user(self):
+ messages = self.setuserinstall(self.w.user_button.get())
+ self.updatestatus()
+ self.showmessages(messages)
if __name__ == '__main__':