[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__':